在父组件 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?
答案 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:
我们倾向于选择我们的数据模型是不可变的。我们通过函数来处理函数,可以将状态更新为顶部的单个原子。