React 16.4允许从状态更改中调用getDerivedStateFromProps.如何应对?

Chr*_*ova 8 javascript reactjs react-16

所以16.4"修复了"getDerivedStateFromProps中的一个错误,现在它在道具更改和状态更改时被解雇了.显然这是有意的,来自这篇文章:https://github.com/facebook/react/issues/12898.但是对我来说,在州内保存以前的道具是一个重大的过度杀伤,所以我问是否有人在处理这样的案件时做了一个程序:

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 }})'
   }
}
Run Code Online (Sandbox Code Playgroud)

所以在上面这种情况下,我永远不会改变输入,因为getDerivedStateFromProps将在接收的新道具和setState触发器上执行,我的条件永远不会是假的.

那么处理这种情况的正确方法是什么?我是否需要在州内保留旧道具并将其用于条件?

我刚从React看到这篇文章,但他们没有提供可行的替代方案.

谢谢你的帮助!

fal*_*sky 1

处理此类问题的主要思想始终是使用一个事实来源。

getDerivedStateFromProps实际上他们提供了 2 个推荐的解决方案,但在那篇博客文章中根本没有使用:

  1. 完全控制的组件
  2. 带钥匙的完全不受控制的组件

以及 2 个替代方案:

  1. 使用额外的道具来追踪getDerivedStateFromProps
  2. 结合使用实例方法ref