export default function App() {
  const measurementData = {
    id: 301,
    name: "Topwear",
    measurements: [
      { id: 1, name: "neck" },
      { id: 2, name: "shoulder" }
    ]
  };

  return (
    <div className="App mt-5">
      <h1>Update Measurement Data</h1>
      {measurementData.measurements?.map((data) => {
        return (
          <div className="d-flex">
              <label className="col-form-label">{data.name}</label>
              <input type="number" name={data.name} className="form-control"/>
          </div>
        );
      })}
    </div>
  );
}

基本上,我是在对象中进行贴图. 我只想添加一个名为Value的新属性,并将从输入字段(Value:20)获得的值保存在measurementData中对象的测量数组的末尾.

//示例:在输入字段中输入值后,对象应该是这样的

  {
      id: 301,
      name: "Topwear",
      measurements: [
        { id: 1, name: "neck", value: 20},
        { id: 2, name: "shoulder", value: 40 }
      ]
  }

Some UI example

推荐答案

您可以通过为measurements创建状态来实现这一点.这允许Reaction在用户在输入中键入内容时重新呈现UI.我将measurementData代码移出了组件,如果这是动态的,您可以简单地将其放回原处.

当在measurements上进行映射以渲染它们时,我们为输入提供valueprops 并传递该测量的当前值.如果没有值,则默认为0.

import { useState } from "react";

const measurementData = {
  id: 301,
  name: "Topwear",
  measurements: [
    { id: 1, name: "neck" },
    { id: 2, name: "shoulder" },
  ],
};

export default function App() {
  // create the state
  const [measurements, setMeasurements] = useState(
    measurementData.measurements
  );

  // create the onChange handler
  const handleOnChange = (e) => {
    const value = e.target.value;
    const name = e.target.name;
    setMeasurements((prevState) => {
      // map over the prev measurements
      return prevState.map((measurement) => {
        // if the name is not the same just return the measurement
        if (measurement.name !== name) return measurement;
        // else return a new object with the prev measurement and the new value
        return {
          ...measurement,
          value: value,
        };
      });
    });
  };

  return (
    <div className="App mt-5">
      <h1>Update Measurement Data</h1>
      {measurements.map((measurement) => {
        return (
          <div className="d-flex">
            <label className="col-form-label">{measurement.name}</label>
            <input
              type="number"
              name={measurement.name}
              value={measurement.value ?? 0}
              onChange={handleOnChange}
              className="form-control"
            />
          </div>
        );
      })}
    </div>
  );
}

Reactjs相关问答推荐

如何使用json将购物车数组传递到后台API

单击按钮时在子元素中不显示任何内容-react

如何访问子集合中的文档?

NextJS如何正确保存添加到购物车中的产品会话

获取未捕获的错误:Gatsby生产版本上的最小化react 错误#418

使用experial_useFormState将参数传递给服务器操作

为什么React UseEffect挂钩在页面重新加载时运行

警告:遇到两个子元素拥有同一把 keys .键应该是唯一的,以便组件在更新时保持其身份

标签文本删除了 MUI 概述的输入

如何解决使用react-hook-form和yup动态创建的输入不集中的问题

Next.js i18n 路由不适用于动态路由

我可以更改 styled() 中的响应吗? (MUI v5)

将props 传递给 NextJS 布局组件

如何在react 中正确销毁上下文?

如何保留我的下一个授权用户会话?所以我可以使用提供的 ID 在其他路由中获取数据

Material UI:使用 mui 手风琴时出现props 类型失败:isValidElement 不是函数

React 中的 Slide API Mui 在开始而不是结束时触发侦听器

谁能根据经验提供有关 useEffect 挂钩的更多信息

谁能根据经验提供有关 useEffect 挂钩的更多信息

ReactJS:按钮启用禁用更改 colored颜色