我无法从本身包含多个对象字段的对象中捕获onChange事件.

这是我的useState钩子.

    const [train, setTrain] = useState({
    trainNumber: "",
    trainName: "",
    fromStation: "",
    toStation: "",
    departureDateTime: "",
    arrivalDateTime: "",
//unable to capture travelDetails property changes.
    travelDetails: {   
      coachesClass: [
        {
          availableTickets: "",
          travelClass: "",
          fare: "",
        },
      ],
    },
  });

假设我想查看onChange事件中的travelDetails.coachesClass[0].那么怎么做呢?

        <div className="row">
          <label htmlFor="availableTickets">First AC</label>
          <div className="col-4">
            <input
              type="number"
              name="availableTickets"
              className="form-control"
              placeholder="Available Tickets"
              required
              value={train.travelDetails.coachesClass[0].availableTickets}
              onChange={(e) => handleChange(e)}
            />
          </div>

这是onChangeHandler

const handleChange = (e) => {
const { name, value } = e.target;
setTrain((prevState) => {
  return {
    ...prevState,
    [name]: value,
  };
});

};

它在其他领域运行良好,但在travelDetails内部,它并没有捕捉到变化.

推荐答案

由于要更新嵌套在对象中的数组中的属性,因此需要调整更新状态的方式.试试这样:

  const handleChange = (e) => {
    setTrain((prevState) => {
      const newCoachesClass = [...prevState.travelDetails.coachesClass];
      newCoachesClass[0] = {
        ...prevState.travelDetails.coachesClass[0],
        availableTickets: e.target.value
      };
      return {
        ...prevState,
        travelDetails: {
          ...prevState.travelDetails,
          coachesClass: newCoachesClass
        }
      };
    });
  };

此外,由于inputnumber类型,您可能希望将availableTickets初始化为数字而不是字符串:

const [train, setTrain] = useState({
    trainNumber: "",
    trainName: "",
    fromStation: "",
    toStation: "",
    departureDateTime: "",
    arrivalDateTime: "",
    travelDetails: {   
      coachesClass: [
        {
          availableTickets: 0,
    ...

Check out this codepen for an example: Edit React-Update-Nested-State-Array

Javascript相关问答推荐

promise .all()永不解决

当我使用jQuery时,我的图标显示为[对象对象]

如何使用3个部件之间的路由?

在JavaScript中逐一播放随机生成的音频文件数组

如何在alpinejs中显示dev中x-for的元素

使用json文件字符串来enum显示类型字符串无法按照计算的enum成员值的要求分配给类型号

django无法解析余数:[0] from carray[0]'

无法访问Vue 3深度监视器中对象数组的特定对象值'

如何在 cypress 中使用静态嵌套循环

Prisma具有至少一个值的多对多关系

如何在coCos2d-x中更正此错误

基于props 类型的不同props ,根据来自接口的值扩展类型

自定义图表工具提示以仅显示Y值

如何在Java脚本中对列表中的特定元素进行排序?

警告框不显示包含HTML输入字段的总和

我想使用GAS和HTML将从Electron 表格中获得的信息插入到文本字段的初始值中

FindByIdAndUpdate在嵌套对象中创建_id

select 2-删除js插入的项目将其保留为选项

MUI迷你图:如何将$符号添加到MUI迷你图中的工具提示数据

TypeORM QueryBuilder限制联接到一条记录