【发布时间】:2016-02-06 20:49:00
【问题描述】:
我需要渲染一个widget,它接受来自SettingsPanel 的设置并将它们传递给LayoutPanel(然后它将根据更新的设置重新渲染自身)。我似乎无法想出一个“干净”的方法来做到这一点。到目前为止,这是我所拥有的:
Widget.js
class Widget extends Component {
handleSettingsChange() {
//need to let layout know of change
}
render() {
<div>
<SettingsPanel
onSettingsChange={handleSettingsChange}
initialSettings={this.props.settings}
/>
<Layout
data={ this.props.data}
/>
</div>
}
}
App.js
const settings = {
hideImages: true,
itemsPerPage: 5
}
<Widget settings={ settings } data={ data } />
我的第一个想法是,在 Widget 中,我可以做到
constructor() {
super()
this.setState({ settings: this.props.settings });
}
handleSettingsChange(data) {
//Assuming data is of the form {changedProperty: value}
this.setState({ settings: Object.assign({}, this.state.settings, data) });
}
render() {
<div>
<SettingsPanel
onSettingsChange={handleSettingsChange}
initialSettings={this.props.settings}
/>
<Layout
data={ this.props.data}
settings={ this.state.settings }
/>
</div>
}
这样,父级是转储消息代理,不必知道正在更改的特定设置的细节。但当然,这行不通,因为, 一个。我被告知从道具设置状态是一种反模式 湾。构造函数无论如何都无法访问 this.props,并且在 else-where (componentDidMount?) 中执行它感觉不对。
我的第二个想法是去setProps 为来自父母的孩子设置道具,但当然不推荐使用。
我该如何解决这个问题?我可能会重新设计它,所以这不是问题,但坦率地说,我只是想了解我缺少什么,或者解决此类问题的“反应”方式是什么。
This question 与我遇到的相同问题相似,但我无法理解/应用已接受的解决方案对我的问题提出的建议。
tldr; “我怎样才能让父组件将状态从一个子组件传递给另一个子组件,同时又不知道它到底传递了什么?”
【问题讨论】:
标签: javascript reactjs components