我有一个React组件<MoneyCounter onChange={this.onCounterChange}>
。
父组件App
自然将onCounterChange传递给MoneyCounter
。 MoneyCounter
本身对其内部按钮有多个回调,因此我可以(1)在每个回调中调用this.props.onChange()
(这是我不喜欢的选项,我只是称之为在一个知道状态正在更新的中心位置,或我可以在componentWillUpdate
/ componentWillUpdate
/ componentShouldUpdate
中调用它。
现在,首先出现的问题是,如果我在后3个选项中的任何一个中调用它,我的App
回调就会调用setState
,并将其置于无限循环中。然而,我随后对应用程序中的onCounterChange
回调进行了更改,以便在不需要时调用setState
,从而修复无限循环错误。
第三个选项实际上覆盖了this.setState
中的MoneyCounter
,在构造函数中是这样的:
let oldSet = this.setState;
this.setState = function() {
let args = Array.from(arguments);
args.push(() => {
this.props.onChange(this.props.unitValue, this.state.count);
});
oldSet.apply(this, args);
}
我已经检查了它并且有效,但它可能不太好。
正确的反应方式是什么?