小编典典

React 中的 state 和 props 有什么区别?

all

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

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

文章后面说:

Props(properties 的缩写)是一个组件的配置,如果可以的话,它是它的选项。它们是从上面接收的并且是不可变的。

  • 所以道具可以改变,但它们应该是不可变的?
  • 什么时候应该使用道具,什么时候应该使用状态?
  • 如果你有 React 组件需要的数据,它应该通过 props 传递还是通过 React 组件中的设置传递getInitialState

阅读 98

收藏
2022-03-03

共1个答案

小编典典

道具和状态是相关的。一个组件的状态往往会成为子组件的
props。道具在父级的渲染方法中作为第二个参数传递给子级,React.createElement()或者,如果您使用的是 JSX,更熟悉的标记属性。

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

父母的状态值childsName成为孩子的this.props.name。从孩子的角度来看,名称道具是不可变的。如果需要更改,父级应该只更改其内部状态:

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

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

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

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

handleName: function(newName) {
   this.setState({ childsName: newName });
}
2022-03-03