反应生命周期方法的理解

我是React.js的新手,我正在努力理解反应生命周期方法中的几个方法。

到目前为止,我还是有一些让我困惑的东西:

1)

据我了解, componentWillUpdatecomponentWillReceiveProps之间的区别是,当父母更换道具时, componentWillReceiveProps将被调用,我们可以在componentWillReceiveProps使用setState(setState)。

例如: https : //github.com/bgerm/react-table-sorter-demo/blob/master/jsx/app.jsx

 var App = React.createClass({ getInitialState: function() { return {source: {limit: "200", source: "source1"}}; }, handleSourceChange: function(source) { this.setState({source: source}); }, render: function() { return ( <div> <DataSourceSelectors onSourceChange={this.handleSourceChange} source={this.state.source} /> <TableSorter dataSource={urlForDataSource(this.state.source)} config={CONFIG} headerRepeat="5" /> </div> ); } }); 

在TableSorter中,我们有

 componentWillReceiveProps: function(nextProps) { // Load new data when the dataSource property changes. if (nextProps.dataSource != this.props.dataSource) { this.loadData(nextProps.dataSource); } } 

意思是当我们改变this.state.source ,我们会期望在TableSorter中调用componentWillReceiveProps

但是,在这种情况下,我不太了解如何使用componentWillUpdatecomponentWillUpdate的定义是

 componentWillUpdate(object nextProps, object nextState) 

我们怎样才能把下一个从父母的状态转化为孩子? 或者,也许我错了,是从父元素传递的nextState?

2)方法componentWillMount迷惑我,因为在官方文档中,它说

在初始渲染发生之前立即在客户端和服务器上调用一次。

在这种情况下,如果在此方法中使用setState,则它将覆盖getInitialState,因为它只会在初始时调用一次。 在这种情况下,在getInitialState方法中设置参数的原因是什么。 在这个特殊的情况下,我们有

  getInitialState: function() { return { items: this.props.initialItems || [], sort: this.props.config.sort || { column: "", order: "" }, columns: this.props.config.columns }; }, componentWillMount: function() { this.loadData(this.props.dataSource); }, loadData: function(dataSource) { if (!dataSource) return; $.get(dataSource).done(function(data) { console.log("Received data"); this.setState({items: data}); }.bind(this)).fail(function(error, a, b) { console.log("Error loading JSON"); }); }, 

项目最初将被覆盖,为什么我们仍然需要items: this.props.initialItems || [] items: this.props.initialItems || [] int items: this.props.initialItems || [] getInitialState方法?

希望你能理解我的解释,如果你有任何问题,请给我一些提示。 非常感谢:)

1)在React更新生命周期中的componentWillUpdate之前调用componentWillUpdate 。 你正确的是componentWillReceiveProps允许你调用setState 。 另一方面, componentWillUpdate是您需要响应状态更改时使用的callback。

道具和国家之间的根本区别在于,国家对这个组成部分是私人的。 这就是为什么父组件或其他任何人都不能操纵组件的状态(例如call setState )。 因此,父子组件关系的默认工作stream将如下所示:

  • 父母将新的道具传递给孩子
  • Child在“componentWillReceiveProps”中处理新的道具,必要时调用setState
  • Child在'componentWillUpdate'中处理新的状态 – 但是如果你的组件是有状态的,那么在'componentWillReceiveProps'中处理道具就足够了。

2)你提供了一个很好的代码示例来说明不同之处。 在getInitialState设置的默认值将用于初始渲染。 来自componentWillMountloadData调用将启动一个AJAX请求,这个请求可能成功也可能不会成功,而且不知道需要多长时间才能完成。 当AJAX请求完成并且setState以新状态被调用时,组件将以默认值被呈现在DOM中。 这就是为什么在getInitialState提供默认状态的原因。

注意:我发现了解React组件生命周期文章对理解React的生命周期方法有很大的帮助。

最好的文章我曾经阅读了解React组件的生命周期:

了解React组件生命周期