我正在观看有关React的Pluralsight课程,并且讲师指出,不应更改道具。我现在正在阅读有关道具与状态的文章(uberVU / react-guide),它说
道具和状态更改都会触发渲染更新。
文章稍后会说:
道具(属性的缩写)是组件的配置,如果可以的话,可以选择它的选项。它们是从上方接收的,并且是不变的。
getInitialState
道具和状态有关。一个组件的状态通常会成为子组件的道具。道具将作为第二个参数传递给父对象的render方法中的子对象,React.createElement()或者,如果您使用的是JSX,则是更熟悉的标签属性。
React.createElement()
<MyChild name={this.state.childsName} />
父项的状态值childsName成为子项的状态值this.props.name。从孩子的角度来看,prop这个名字是一成不变的。如果需要更改,则父级只需更改其内部状态即可:
childsName
this.props.name
this.setState({ childsName: 'New name' });
React将为您将其传播给孩子。接natural而来的自然问题是:如果孩子需要更改道具名称该怎么办?通常,这是通过子事件和父回调完成的。子级可能会公开一个名为的事件onNameChanged。然后,父级将通过传递回调处理程序来订阅事件。
onNameChanged
<MyChild name={this.state.childsName} onNameChanged={this.handleName} />
子级将通过调用例如,将其请求的新名称作为参数传递给事件回调this.props.onNameChanged('New name'),而父级将在事件处理程序中使用该名称来更新其状态。
this.props.onNameChanged('New name')
handleName: function(newName) { this.setState({ childsName: newName }); }