React's setProps()已弃用警告
React's setProps() deprecated warning
在父组件应用程序中,我渲染子组件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
方法,将正确的值作为道具传递给创建它的组件。
如何在不使用setState方法的情况下将这样的对象正确地传递给PersonsTable?
这是完整的代码https://jsfiddle.net/jpt5uy1k/
看起来您正试图通过在引用上调用setState来实现反模式。最好将道具传递给子对象并使用它们。如果您需要状态,请将其设置在父对象中,并将其作为道具传递下去。
<div>
<PersonsTable aProp={someCoolInfoOrParentState} />
...
</div>
只有当您出于某种原因需要"伸出援手"并获得实际DOM节点时,才应使用Ref。此外,你通常希望状态在尽可能少的地方,因为它可能很复杂,需要额外的"机器"才能工作。最好将状态保持在一个位置,并通过其他组件将其向下传递。
从中查看https://github.com/reactjs/react-basic:
我们倾向于希望我们的数据模型是不可变的。我们通过线程传递函数,可以将状态更新为顶部的单个原子。
相关文章:
- chrome扩展更改主机/域警告
- 如何永久停止jshint'只读'警告/错误
- JShint-.jshintrc中的ES6有esversion,但仍收到警告(使用atom)
- Webpack UglifyJS仍在发出警告消息
- 我确实有一个表单,如果用户输入了输入,它应该检查否定或空的输入框,并抛出一条警告消息
- React Router一直给我一个警告:你不能更改<路由器路由>
- 为什么Grunt Copy给了我一个'undefined不是函数'警告
- 执行此代码时,我看不到警告框
- 页面中的声学警告
- 在Resharper中禁用javascript类型强制警告
- npm警告包.jsonCrackingJS@0.0.1没有存储库字段
- 为什么JavaScript对话框(警告、确认)会停止页面重绘
- 尝试在两次迭代中警告同一选择器的值,在第一次迭代中得到正确的值,而在第二次迭代中获得不正确的值.为什么?
- 警告密码的jquery值错误
- 我一直收到的控制台警告是什么?推迟长时间运行的计时器任务以提高滚动的流畅性
- 警告:失败的propType:类型为“array”的无效prop应为React的“object”
- 解析云代码不会记录/警告成功或失败
- 尝试设置时间时Moment JS Deprecation警告
- 在html页面的iframe中显示一个警告框
- React's setProps()已弃用警告