【发布时间】:2014-09-19 07:01:12
【问题描述】:
我在这里有一个解决这个问题的 jsbin:http://jsbin.com/tekuluve/1/edit
在 onClick 事件中,我从模型中删除一个元素,并重新渲染应用程序。但奇怪的是,在 componentWillReceiveProps()(以及 componentWillUpdate 和 componentDidUpdate)中,nextProps 总是 === 到 this.props,不管我做什么。
/** @jsx React.DOM */
var Box = React.createClass({
render: function() {
return (
<div className="box" onClick={ UpdateModel }>
{ this.props.label }
</div>
);
}
});
var Grid = React.createClass({
componentWillReceiveProps: function(nextProps) {
// WTF is going on here???
console.log(nextProps.boxes === this.props.boxes)
},
render: function() {
var boxes = _.map(this.props.boxes, function(d) {
return (<Box label={ d.number } />);
});
return (
<div className="grid">
{ boxes }
</div>
);
}
});
var model = [
{ number: 1 },
{ number: 2 },
{ number: 3 },
{ number: 4 },
{ number: 5 }
];
function UpdateModel() {
React.renderComponent(
<Grid boxes={ _.pull(model, _.sample(model)) } />,
document.body
);
}
React.renderComponent(
<Grid boxes={ model } />,
document.body
);
在 componentWillReceiveProps() 生命周期事件中通过 UpdateModel() 更新后,我需要 nextProps 与 this.props 不同。
【问题讨论】:
-
你为什么不使用状态?
-
因为这不适合我正在构建的用例。我正在尝试构建一些生命周期方法,这些方法允许我将动态道具传递给卸载组件,所以首先我需要确定哪些组件正在卸载,因此在 componentWillReceiveProps() 中进行比较。
-
我遇到了同样的问题。当调用componentWillReceiveProps时,当我尝试访问this.props时,它已经与nextProps相同。我无法访问旧道具来比较它们。我的 props 肯定发生了变化,在组件收到 props 之前,我无法访问 props 是什么。
标签: javascript reactjs