【问题标题】:In react hooks how do I pass a newly created object to a state object?在反应钩子中,我如何将新创建的对象传递给状态对象?
【发布时间】:2019-11-05 14:46:02
【问题描述】:

如何在此处将err 传递给errors : {}

const data = { name: "", errors: {} }
const [values, setValues] = useState(data)
const handleSubmit = () => {
     const err = validate();  // I receive an object in err
    setValues({ ...values, errors: err }) // I cant set err to //errors: {} above
}

【问题讨论】:

  • 我不确定这个函数是否区分大小写,如果你使用useState而不是usestate,它是否有效?您使用setValues() 设置errors 对我来说看起来是正确的。
  • 我的 VS 代码中的拼写是正确的
  • 如果 validate 是同步方法,当前代码可以正常工作
  • 似乎工作得很好:codesandbox.io/s/sparkling-tree-9tuh1 -- 不管问题是什么,这与您的这部分代码无关。
  • 看看这个关于用useState 钩子更新嵌套对象的问题:Link

标签: javascript react-hooks


【解决方案1】:

React DOCs - State Hook,我们得到:

状态变量可以很好地保存对象和数组,因此您仍然可以将相关数据组合在一起。但是,与类中的 this.setState 不同,更新状态变量总是替换它而不是合并它。

另外,来自Hooks FAQ

现在假设我们要编写一些逻辑,当用户移动鼠标时改变lefttop。注意我们如何手动将这些字段合并到之前的状态对象中:

function handleWindowMouseMove(e) {
     // Spreading "...state" ensures we don't "lose" width and height
     setState(state => ({ ...state, left: e.pageX, top: e.pageY }));
   }

因此,你目前的做法是正确的。

【讨论】:

    【解决方案2】:

    只有当validate() 方法返回一个对象时,您建议的方式才可能有效。

    如果validate() 返回一个字符串、数组...赋值setValues({ ...values, errors: err }) 可能会中断,因为errors 期待一个对象

    【讨论】:

      猜你喜欢
      • 2021-06-15
      • 2021-08-11
      • 2019-10-27
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 2023-01-25
      • 2016-11-10
      相关资源
      最近更新 更多