在react hooks中,如何将新创建的对象传递给状态对象?

时间:2019-06-23 16:05:35

标签: javascript react-hooks

如何在此处将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
}

2 个答案:

答案 0 :(得分:0)

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 }));
   }

因此,您当前的操作方式是正确的。

答案 1 :(得分:0)

您建议的方法只有在方法validate()返回对象时才有效。

如果validate()返回一个字符串,数组,则分配setValues({ ...values, errors: err }) 可能会中断,因为errors期望一个 object