如何从其他状态值设置反应状态值?

时间:2020-03-04 00:16:20

标签: javascript reactjs react-hooks

我处于状态的对象数组:

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

有什么帮助吗?

1 个答案:

答案 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);