Я пытаюсь понять, как разделить состояние хуков между компонентами. Но вроде не делится. Я делаю что-то не так здесь?
Home.js
export default function Home() {
const [search, setSearch]= useState('');
return (
<div>
<Input search = {search} handleChangeEvent = {setSearch} />
<Products search = {search} handleChangeEvent = {setSearch} />
</div>
)
}
Input.js
export default function Input({search, setSearch}) {
const handleChangeEvent = (e) => {
setSearch(e.target.value)
}
return (
<div className='App'>
<input
placeholder='search...'
value = {search}
onChange = {handleChangeEvent}
/>
{search}
</div>
)
}
Живой пример:
const { useState } = React;
/*export default*/ function Home() {
const [search, setSearch]= useState('');
return (
<div>
<Input search = {search} handleChangeEvent = {setSearch} />
<Products search = {search} handleChangeEvent = {setSearch} />
</div>
)
}
/*export default*/ function Input({search, setSearch}) {
const handleChangeEvent = (e) => {
setSearch(e.target.value)
}
return (
<div className='App'>
<input
placeholder='search...'
value = {search}
onChange = {handleChangeEvent}
/>
{search}
</div>
)
}
const Products = ({search}) => {
return <div>Product: {search}</div>;
};
ReactDOM.createRoot(document.getElementById("root"))
.render(<Home />);
<div id = "root"></div>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/18.0.0/umd/react.development.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.0.0/umd/react-dom.development.js"></script>
Привет! Обновите свой вопрос, указав минимальный воспроизводимый пример, демонстрирующий проблему, в идеале работоспособный, используя фрагменты стека (кнопка [<>]
на панели инструментов). Фрагменты стека поддерживают React, включая JSX; вот как это сделать. (Редактировать: я сделал это для вас, что показало мне проблему выше.)
Вы передаете handleSearch
как реквизит в своем компоненте Home
, но Input
ожидает setSearch
, поэтому просто измените эту строку в своем Home
return (
<div>
<Input search = {search} setSearch = {setSearch} /> // change here
<Products search = {search} handleChangeEvent = {setSearch} />
</div>
)
setSearch
вInput
какhandleChangeEvent
, но затем пытаетесь использовать его какsetSearch
. Замените<Input search = {search} handleChangeEvent = {setSearch} />
на<Input search = {search} setSearch = {setSearch} />
.