Javascript 使用React钩子返回动态创建的嵌套对象的上一个状态?
我有一个状态对象,我想动态创建一个键和键内的一个对象。它需要是一个对象,以便对父组件是动态的,并返回以前的状态。Javascript 使用React钩子返回动态创建的嵌套对象的上一个状态?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我有一个状态对象,我想动态创建一个键和键内的一个对象。它需要是一个对象,以便对父组件是动态的,并返回以前的状态。键是基于父组件的动态键。现在的setState按预期工作,创建状态的动态部分,但是,在嵌套对象中返回状态是我感到困惑的地方。截至当前的状态将覆盖上一个状态 这里有一些代码 import React, { useState, useCallback } from "react"; import { FormGroup, CustomInput } from "
键是基于父组件的动态键。现在的setState
按预期工作,创建状态的动态部分,但是,在嵌套对象中返回状态是我感到困惑的地方。截至当前的状态将覆盖上一个状态
这里有一些代码
import React, { useState, useCallback } from "react";
import { FormGroup, CustomInput } from "reactstrap";
import UniqueString from "unique-string";
function Ratings({ parentCheckedGood, parentCheckedNA, question, section }) {
const [state, setState] = useState({});
//THE ISSUE IS INSIDE THIS ONCHANGE FUNCTION
const onChange = useCallback(
(e) => {
const { name, value } = e.target;
// The state structure works as expected but getting the previous nested state is the issue
setState((state) => ({
...state,
[section]: { ...state[section], [question]: value },
}));
},
[section, question]
);
console.log(state);
const string = UniqueString();
return (
<div>
<FormGroup required>
<div>
<CustomInput
// checked={parentCheckedGood}
onChange={onChange}
type="radio"
id={string + "1"}
name={question}
value="Good"
label="Good"
/>
<CustomInput
onChange={onChange}
type="radio"
id={string + "2"}
name={question}
value="Fair"
label="Fair"
/>
<CustomInput
onChange={onChange}
type="radio"
id={string + "3"}
name={question}
value="Poor"
label="Poor"
/>
<CustomInput
// checked={parentCheckedNA}
onChange={onChange}
name={question}
type="radio"
id={string + "4"}
value="N/A"
label="N/A"
/>
</div>
</FormGroup>
</div>
);
}
export default Ratings;
回答:
在做了一些调试之后,我发现我的方法是正确的。我在父级中有另一个onChange函数,它与setState冲突。如果有人正在寻找一种动态的方法来创建一个状态,那么这可能是最好的方法。不创建额外的设置状态。所有customInput共享相同的状态;如果childen组件返回具有相同密钥的状态,则它们将覆盖上一个密钥 所有customInput共享相同的状态;如果childen组件返回具有相同密钥的状态,则它们将覆盖上一个密钥 这个setState的工作方式是创建一个动态键,这样它就不会在它的第一个实例上迭代。因此,此函数可以处理多个输入。您可以发布一个状态示例,当前状态示例和上一个状态示例,我并没有真正感到困惑。我为你和跟随这篇文章的任何人添加了答案。这个setState的工作方式是它创建一个动态键,这样它就不会在它的第一个实例上迭代。因此,这个函数能够处理多个输入。你可以发布一个状态示例,当前状态和上一个状态,我并没有真正感到困惑。我为你以及任何关注这篇文章的人添加了答案。
state = {
section: {name: value}
}