React的setProps()已弃用警告

时间:2016-03-30 19:16:25

标签: javascript reactjs

在父组件 App 中,我呈现子组件 PersonsTable

  var App = React.createClass({
    addPerson: function() {
      // building personToAdd object and passing to personsTable...
      this.refs.personsTable.setState({personToAdd: person});
    },

    render: function() {
      return (
        <div>
          <PersonsTable ref="personsTable" />
          ...
        </div>
      );
    },
  });

现在我通过调用PersonsTable的 setState 方法传递一个新对象。 如果我调用 setProps 方法,则会返回警告

  

未捕获的不变违规:setProps(...):您在具有父级的组件上调用了setProps。这是一种反模式,因为道具在渲染时会被反应性地更新。相反,请更改所有者的render方法,将正确的值作为props传递给创建它的组件。

如何在不使用 setState 方法的情况下将此类对象正确传递给PersonsTable?

以下是完整代码https://jsfiddle.net/jpt5uy1k/

1 个答案:

答案 0 :(得分:1)

看起来你正试图通过在ref上调用setState来实现反模式。将道具传递给孩子并使用它们会更好。如果您需要状态,请将其设置为父级并将其作为道具传递下去。

SELECT groups_id 
FROM   members 
GROUP  BY groups_id 
HAVING COUNT(DISTINCT CASE WHEN users_id IN (1, 2) THEN users_id END) = 2
       AND
       COUNT(CASE WHEN users_id NOT IN (1, 2) THEN users_id END) = 0

只有当您需要&#34;伸出&#34;时,才应使用参考号。并出于某种原因获取实际的DOM节点。此外,您通常希望在尽可能少的地方建立州,因为它可能很复杂并且需要额外的机器&#34;做工作最好将状态保存在一个地方,并通过其他组件将其断开。

请参阅https://github.com/reactjs/react-basic

  

我们倾向于选择我们的数据模型是不可变的。我们通过函数来​​处理函数,可以将状态更新为顶部的单个原子。