В общем, когда вам нужно вызвать дочерний обработчик от родителя , вы должны знать, что ваше мышление немного неверно.В React родители не должны обычно вызывать что-либо у своих детей.
Если вы строите систему с вкладками, я бы пошел с монтированием / размонтированием Tab
s на переключателе.и использовать componentDidMount
и componentWillUnmount
методы жизненного цикла.
Однако, прочитав ваш вопрос еще раз, я не думаю, что вам нужны такие обратные вызовы.Вот что я предлагаю:
class Tab extends Component {
componentDidMount() {
// do stuff here
}
componentWillUnmount() {
// ...
}
render() {
return (
<div className="tabTitle">{this.props.title}</div>
);
}
}
class TabbedView extends Component {
state = {
activeTab: 0,
};
onActiveTabChange(idx) {
this.setState({activeTab: idx});
}
render() {
return (
<div className="tabs">
<div className="tabButtons">
{React.Children.map((c, idx) => (
<button onClick={this.onActiveTabChange(idx)}>
{c.props.title}
</button>
))}
</div>
<div className="activeTab">
{React.Children.map(children, (child, idx) => {
if (idx === this.state.activeTab) {
return child;
}
return null;
})}
</div>
</div>
);
}
}
Примечание Мой пример не очень подробный.Я просто хотел дать вам идею, поскольку реализация зависит от ваших конкретных потребностей.
Именно так я обычно структурирую компоненты, как это.