Сделали колбэк с пробросом на 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' import React, { useState, useCallback } from 'react'
function Parent() { function Parent() {
const [text,setText] = useState('') const [selectedId,setSelectedId] = useState(null);
const handlerChange = useCallback( event => { const items = [
setText(event.target.value); {id:1, name: 'Первый'},
{id:2, name: 'Второй'},
{id:3, name: 'Третий'},
{id:4, name: 'Четвертый'},
];
const handleSelect = useCallback( id => {
setSelectedId(id);
},[]); },[]);
return ( return (
<> <>
<h2>Проверка события onChange</h2> <h2>Проверка события select</h2>
<div> <div>
<Child value={text} onChange={handlerChange} /> <ItemList items={items} onSelect={handleSelect} />
<p>Вы ввели текст: {text}</p> {selectedId && <p>Выбран элемент с ID: {selectedId}</p>}
</div> </div>
</> </>
); );
} }
function Child({ value, onChange }) { function ItemList({items, onSelect}) {
console.log('rendred'); return (
return <input type="text" value={value} onChange={onChange} /> <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() { function App() {
return ( return (
<> <>