小编典典

React中state和props有什么区别?

javascript

我正在观看有关React的Pluralsight课程,并且讲师指出,不应更改道具。我现在正在阅读有关道具与状态的文章(uberVU / react-guide),它说

道具和状态更改都会触发渲染更新。

文章稍后会说:

道具(属性的缩写)是组件的配置,如果可以的话,可以选择它的选项。它们是从上方接收的,并且是不变的。

  • 所以道具可以改变,但它们应该是不变的?
  • 什么时候应该使用道具,什么时候应该使用状态?
  • 如果您有React组件需要的数据,是否应该通过prop或在React组件中通过setup进行设置getInitialState

阅读 502

收藏
2020-05-01

共1个答案

小编典典

道具和状态有关。一个组件的状态通常会成为子组件的道具。道具将作为第二个参数传递给父对象的render方法中的子对象,React.createElement()或者,如果您使用的是JSX,则是更熟悉的标签属性。

<MyChild name={this.state.childsName} />

父项的状态值childsName成为子项的状态值this.props.name。从孩子的角度来看,prop这个名字是一成不变的。如果需要更改,则父级只需更改其内部状态即可:

this.setState({ childsName: 'New name' });

React将为您将其传播给孩子。接natural而来的自然问题是:如果孩子需要更改道具名称该怎么办?通常,这是通过子事件和父回调完成的。子级可能会公开一个名为的事件onNameChanged。然后,父级将通过传递回调处理程序来订阅事件。

<MyChild name={this.state.childsName} onNameChanged={this.handleName} />

子级将通过调用例如,将其请求的新名称作为参数传递给事件回调this.props.onNameChanged('New name'),而父级将在事件处理程序中使用该名称来更新其状态。

handleName: function(newName) {
   this.setState({ childsName: newName });
}
2020-05-01