【问题标题】:How to set and access values of nested array objects in React state using useState hook?如何使用 useState 钩子在 React 状态下设置和访问嵌套数组对象的值?
【发布时间】:2021-01-16 03:28:59
【问题描述】:

这是我的状态。

const [poll, setPoll] = useState({
    pollQuestion: "Sample question- Is it fine?",
    pollOption: [
      { optionId: 1, optionText: "sample option1", votes: "0" },
      { optionId: 2, optionText: "sample option2", votes: "0" },
      { optionId: 3, optionText: "sample option3", votes: "0" },
      { optionId: 4, optionText: "sample option4", votes: "0" },
    ]
  });

我正在尝试为我的投票设置 optionText。 我目前正在使用它,但这是错误的。

onChange={(e) => setPoll({ ...poll, pollOption.optionText: e.target.value })}

有人可以纠正我吗?

还有如何设置选项文本框的值?

 value={poll.pollOption.optionText}

我试过了,但它同时设置了所有 4 个输入字段的值

【问题讨论】:

  • 第一个,需要改哪一个?整个 PollOption?
  • @Veno 有 4 个类似的输入字段用于输入 4 个选项。当用户在第一个选项框中键入时,我想更改 PollOption[] 数组中的第一个对象。同样,其他 3 个输入字段还将有 3 个 onChange 函数

标签: json reactjs object state use-state


【解决方案1】:

你还没有指定错在哪里,但乍一看,PollOption 是一个对象数组,所以你必须指定索引才能访问正确的对象。

要更改索引为i 的对象的OptionText,请尝试:

onChange={(e) => setPoll({ ...poll, PollOption[i].OptionText: e.target.value })}

所以用OptionId: 4改变对象意味着改变数组中的第4个对象,所以i = 3

onChange={(e) => setPoll({ ...poll, PollOption[3].OptionText: e.target.value })}

【讨论】:

  • 如果 OP 想要更改第二个选项怎么办? optionId 4 的那个呢?
  • 用一般和具体的例子编辑了我的答案。
  • 感谢@wesley.buijsman 的回答,但这似乎不适用于useState。我也尝试通过传递 previousState 并返回一个新状态来设置状态的功能方式,但它们不起作用。我附上一个链接,您可以实时编辑代码并查看codesandbox.io/s/nested-objects-doubt-rcu0e
猜你喜欢
  • 2020-04-29
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多