getDerivedStateFromProps

getDerivedStateFromProps

所以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:

  • Fully controlled component
  • Fully uncontrolled component with a key

  • 以及2个替代方法:
  • 使用extra prop跟踪getDerivedStateFromProps
  • ref结合使用instance method
  • 09-18 16:04