Сделали колбэк с пробросом на 2 уровня

This commit is contained in:
2026-05-05 21:34:05 +03:00
parent 92dc5df96b
commit bd35029fc1
+29 -9
View File
@@ -2,28 +2,48 @@ import styles from './styles/App.module.scss'
import React, { useState, useCallback } from 'react'
function Parent() {
const [text,setText] = useState('')
const [selectedId,setSelectedId] = useState(null);
const handlerChange = useCallback( event => {
setText(event.target.value);
const items = [
{id:1, name: 'Первый'},
{id:2, name: 'Второй'},
{id:3, name: 'Третий'},
{id:4, name: 'Четвертый'},
];
const handleSelect = useCallback( id => {
setSelectedId(id);
},[]);
return (
<>
<h2>Проверка события onChange</h2>
<h2>Проверка события select</h2>
<div>
<Child value={text} onChange={handlerChange} />
<p>Вы ввели текст: {text}</p>
<ItemList items={items} onSelect={handleSelect} />
{selectedId && <p>Выбран элемент с ID: {selectedId}</p>}
</div>
</>
);
}
function Child({ value, onChange }) {
console.log('rendred');
return <input type="text" value={value} onChange={onChange} />
function ItemList({items, onSelect}) {
return (
<ul>
{items.map(item => (
<Item key={item.id} item={item} onSelect={onSelect} />
))}
</ul>
)
}
const Item = React.memo(({ item, onSelect }) => {
console.log(`rendred ${item.name}`);
const handleClick = useCallback(() => {
onSelect(item.id)
})
return <li onClick={handleClick}>{item.name}</li>
});
function App() {
return (
<>