我处于状态的对象数组:
const [formFields, setFormFields] = useState([
{
height: 45,
label: "tv",
placeholder: "555",
name: "tv",
maxWidth: 203,
value: dataValues.tv,
priority: 1
},
{
height: 45,
label: "radio",
placeholder: "50%",
name: "radio",
maxWidth: 126,
value: dataValues.radio,
priority: 2
},
{
height: 45,
label: "instagram",
placeholder: "60%",
name: "instagram",
maxWidth: 126,
value: dataValues.instagram,
priority: 3
}
]);
我需要在其他状态更新时更新每个状态值(当我单击 Submit money 按钮时,每个状态值都应更新),但它不会更新。 您可以检查demo
有什么帮助吗?
答案 0 :(得分:2)
您的输入元素的值基于formFields
对象进行设置。最初创建对象时,将使用dataValues
对象中的值,由于您在dataValues
钩子中写的内容,apiData
将根据您的useEffect
对象自动更新,但是您实际上从未写过任何东西来更新formFields
本身。
以下代码应使其按原样工作,
const newFormFields = [...formFields];
newFormFields[0].value = apiData.tv;
newFormFields[1].value = apiData.radio;
newFormFields[2].value = apiData.instagram;
setFormFields(newFormFields);
但是我强烈建议重构。看来您这里有很多不必要的冗余。
您在注释中提到不能使用索引。在这种情况下,类似的事情应该起作用。
const newFormFields = [...formFields];
newFormFields.map(field => (field.value = apiData[field.name]));
setFormFields(newFormFields);