所以16.4“修复”了getDerivedStateFromProps中的一个错误,现在它在props更改和状态更改上均被触发。显然,这是有意的,来自这篇文章:https://github.com/facebook/react/issues/12898。但是对我而言,在州内保存先前的 Prop 是一个重大的过大杀伤力,所以我问有人是否制定了处理此类情况的程序:
class Componentche extends React.Component {
state = {
valuesForInput: {
input1: ''
}
}
static getDerivedStateFromProps(props, state) {
if (props.someInitialValuesForInput.input1 !== state.valuesForInput.input1) {
return {
valuesForInput: {
...state,
input1: props.someInitialValuesForInput.input1
}
}
}
return state;
render () {
<Input value='valuesForInput.input1' onChange='(e) => setState({valuesForInput: {...this.state, input1: e.target.value }})'
}
}
因此,在上述情况下,我将永远不会更改输入,因为getDerivedStateFromProps将同时在收到的新 Prop 和setState触发器上执行,而且我的条件永远不会为假。
那么处理这种情况的正确方法是什么?我是否真的需要将旧 Prop 保留在状态中,并也将其用于条件?
我刚刚看到了这个post from React,但是他们没有提供可行的替代方法。
谢谢你的帮助!
最佳答案
解决这个问题的主要思想总是使用一种真理来源。
实际上,他们在该博客文章中提供了两种建议的解决方案,它们根本不使用getDerivedStateFromProps
:
以及2个替代方法:
getDerivedStateFromProps
ref
结合使用instance method