我正在观看关于 React 的 Pluralsight 课程,讲师说不应更改道具。我现在正在阅读一篇关于道具与状态的文章(uberVU/react- guide) ,它说
道具和状态更改都会触发渲染更新。
文章后面说:
Props(properties 的缩写)是一个组件的配置,如果可以的话,它是它的选项。它们是从上面接收的并且是不可变的。
getInitialState
道具和状态是相关的。一个组件的状态往往会成为子组件的 props。道具在父级的渲染方法中作为第二个参数传递给子级,React.createElement()或者,如果您使用的是 JSX,更熟悉的标记属性。
React.createElement()
<MyChild name={this.state.childsName} />
父母的状态值childsName成为孩子的this.props.name。从孩子的角度来看,名称道具是不可变的。如果需要更改,父级应该只更改其内部状态:
childsName
this.props.name
this.setState({ childsName: 'New name' });
React 会为你将它传播给孩子。一个自然的后续问题是:如果孩子需要更改其名称道具怎么办?这通常通过子事件和父回调来完成。孩子可能会暴露一个名为的事件,例如,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 }); }