Допустим, у меня есть дерево компонентов следующим образом
<App>
</Header>
<Content>
<SelectableGroup>
...items
</SelectableGroup>
</Content>
<Footer />
</App>
Где SelectableGroup
может выбрать / отменить выбор элементов, которые он содержит, с помощью мыши.Я сохраняю текущее выделение (массив выбранных элементов) в хранилище с избыточностью, чтобы все компоненты моего приложения могли его прочитать.
Компонент Content
установил ref
в SelectableGroup
что позволяет мне очищать выделение программно (вызывая clearSelection()
).Примерно так:
class Content extends React.Component {
constructor(props) {
super(props);
this.selectableGroupRef = React.createRef();
}
clearSelection() {
this.selectableGroupRef.current.clearSelection();
}
render() {
return (
<SelectableGroup ref={this.selectableGroupRef}>
{items}
</SelectableGroup>
);
}
...
}
function mapStateToProps(state) {
...
}
function mapDispatchToProps(dispatch) {
...
}
export default connect(mapStateToProps, mapDispatchToProps)(Content);
Я легко могу представить, чтобы передать это clearSelection()
детям Content
.Но как, и это мой вопрос, я могу позвонить clearSelection()
из родственного компонента Footer
?
- Должен ли я отправлять действие из
Footer
и устанавливать какое-то состояние "запрос на очистку выбора" в хранилище Redux?Реагируйте на это в обратном вызове componentDidUpdate()
в Content
, а затем немедленно отправьте другое действие, чтобы сбросить это состояние "запроса на очистку выбора"? - Или есть какой-либо предпочтительный способ вызова функций родных братьев?