更改 'uncle' 组件中的状态?
Changing state in 'uncle' component?
在我的一条路线上,我有一个项目列表,您可以单击它以在 'detail' 视图中获取更多详细信息。列表和详细视图同时显示。
层次结构:
A (page wrapper component)
/ \
(list view) B C (detail view)
/ | \
(list items) D.....Z
我在 D..Z 上有一个点击事件应该改变组件 C 中的状态,以显示点击列表项的数据
从概念上讲,考虑到 React 强调单向数据流,这应该如何实现?
您应该始终尽量将状态放在组件树的最高位置。
在您的情况下,有关当前选择的项目的信息应存储在包装器组件的状态中,因为它是详细视图组件和列表项组件的祖先。
这是页面包装器组件的示例实现:
var PageWrapper = React.createClass({
getInitialState() {
return {
selectedItem: null,
};
},
_handleItemClick(selectedItem) {
this.setState({ selectedItem });
},
render() {
return (
<div>
<ListView items={[...]} onItemClick={this._handleItemClick} />
<DetailView item={this.state.selectedItem} />
</div>
);
},
});
在我的一条路线上,我有一个项目列表,您可以单击它以在 'detail' 视图中获取更多详细信息。列表和详细视图同时显示。
层次结构:
A (page wrapper component)
/ \
(list view) B C (detail view)
/ | \
(list items) D.....Z
我在 D..Z 上有一个点击事件应该改变组件 C 中的状态,以显示点击列表项的数据
从概念上讲,考虑到 React 强调单向数据流,这应该如何实现?
您应该始终尽量将状态放在组件树的最高位置。
在您的情况下,有关当前选择的项目的信息应存储在包装器组件的状态中,因为它是详细视图组件和列表项组件的祖先。
这是页面包装器组件的示例实现:
var PageWrapper = React.createClass({
getInitialState() {
return {
selectedItem: null,
};
},
_handleItemClick(selectedItem) {
this.setState({ selectedItem });
},
render() {
return (
<div>
<ListView items={[...]} onItemClick={this._handleItemClick} />
<DetailView item={this.state.selectedItem} />
</div>
);
},
});