#javascript #reactjs
Вопрос:
У меня есть вопрос относительно отправки значения щелчка первым родственным компонентам, и я отправлю значение реквизита вторым братьям и сестрам, возможно ли это?
У меня есть модуль, в котором, когда я нажимаю элементы категории на первые родственные элементы, продукты на втором родственном элементе будут меняться в зависимости от названия категории, которое я нажимаю на первом родственном элементе.
Вот мои родительские компоненты:
function BuyerCategoryPage(props) {
return (
<div>
<CategorySlider />
<CategoryProducts/>
</div>
)
}
export default BuyerCategoryPage
Первый брат или Сестра CategorySlider.js:
const HandleChangeProductCat = (value) => {
console.log(value);
// send the value to the second sibling
}
return (
<div>
<Container fluid>
<Slider style={{paddingTop:20, margin: '0 auto'}} {...settings}>
{
SlideData.map((data) => {
return (
<div key={data.id} >
<div className="sliderDataCategory">
<h6>
<Container>
<Row>
<Col md={3}>
<img className="img-fluid" src={data.cat_image} />
</Col>
<Col >
<label onClick={() => HandleChangeProductCat(data.cat_title)}>{data.cat_title}</label>
</Col>
</Row>
</Container>
</h6>
</div>
</div>
)
})
}
</Slider>
</Container>
</div>
)
Второй брат CategoryProducts.js
function CategoryProducts(props) {
}
Комментарии:
1. Какова взаимосвязь между «родственными» компонентами? Каково взаимодействие пользователей между ними? Переходит ли пользователь от первого компонента ко второму? Вы просто хотите обновить какое-то глобальное состояние с первого и заставить второе «увидеть» изменение? Вы можете поднять состояние до ближайшего общего предка и передать каждому реквизит, используя контекстный API React или глобальную библиотеку управления состоянием, такую как Redux.
2. @DrewReese вы правы, я просто хочу обновить некоторое глобальное состояние с первого, а второе увидеть изменения.
Ответ №1:
Самым простым было бы поднять состояние в BuyerCategoryPage
компонент и передать обработчик «onChange» CategorySlider
и значение состояния в CategoryProducts
function BuyerCategoryPage(props) {
const [state, setState] = React.useState(); // common state
return (
<div>
<CategorySlider onChange={setState} /> // pass updater function
<CategoryProducts value={state} /> // pass state value
</div>
);
}
CategorySlider
const handleChangeProductCat = (value) => {
console.log(value);
props.onChange(value); // invoke callback and pass new value
}
CategoryProducts
function CategoryProducts({ value }) { // access the passed value
// use the `value` prop as necessary
}
Ответ №2:
Например:
function Example() {
const [value, setValue] = useState("");
const onClick = (someValue) => {
setValue(someValue);
}
return (
<div>
<First onClick={onClick} />
<Second value={value} />
</div>
)
}
function First(props) {
const onClick = () => {
props.onClick((new Date()).toString());
}
return (
<input type="button" onClick={onClick} value="Click me" />
)
}
function Second(props) {
return (
<div>{props.value}</div>
)
}