Second value overrides previous in reactjs [closed]

▼魔方 西西 提交于 2020-08-09 13:35:10

问题


I have the application what count the difference between 2 hours which user sets. Now when i set first hours like:
13:00 and 14:00, i get difference - the diff is 1hours and 0minutes,
when i set the second time adding another field, the second field overrides the previous value, and on the first i get: difference - the diff is 0hours and 0minutes.
How to solve this?

demo: https://codesandbox.io/s/runtime-bird-6mlfs?file=/index.js

code:

const Demo = () => {
  const [date, setDate] = useState({});
  const [fullDate2, setFullDate2] = useState({});

  const onFinish = values => {
    console.log("Received values of form:", values, date);
  };

  const changeDate1 = (momentDate, dateString, key) => {
    console.log(dateString, key);
    setDate({ ...date, [key]: dateString });
  };
  const changeDate2 = (momentDate, dateString, key) => {
    setFullDate2({ ...date, [key]: dateString });
  };
  console.log(date, fullDate2.length);
  const myDiff = (startSubEventTimes, endSubEventTimes, k) => {
    if (Object.keys(endSubEventTimes).length) {
      const startTime = moment(startSubEventTimes[k], "HH:mm");
      const endTime = moment(endSubEventTimes[k], "HH:mm");
      const duration = moment.duration(endTime.diff(startTime));
      const hours = parseInt(duration.asHours(), 0);
      const minutes = parseInt(duration.asMinutes(), 0) - hours * 60;
      return `the diff is ${hours}hours and ${minutes}minutes`;
    }
  };
  return (
    <Form name="dynamic_form_nest_item" onFinish={onFinish} autoComplete="off">
      <Form.List name="users">
        {(fields, { add, remove }) => {
          return (
            <div>
              {fields.map(field => (
                <Space
                  key={field.key}
                  style={{ display: "flex", marginBottom: 8 }}
                  align="start"
                >
                  <Form.Item
                    {...field}
                    name={[field.name, "first"]}
                    fieldKey={[field.fieldKey, "first"]}
                    rules={[{ required: true, message: "Missing first name" }]}
                  >
                    <Input placeholder="First Name" />
                  </Form.Item>

                  <TimePicker
                    defaultValue={moment("12:08", format)}
                    format={format}
                    onChange={(date, dateString) =>
                      changeDate1(date, dateString, field.key)
                    }
                  />
                  <TimePicker
                    defaultValue={moment("12:08", format)}
                    format={format}
                    onChange={(date, dateString) =>
                      changeDate2(date, dateString, field.key)
                    }
                  />
                  <p>{date[field.key]}</p>
                  <p>{fullDate2[field.key]}</p>
                  <span>
                    difference -{" "}
                    {Object.keys(fullDate2).length
                      ? myDiff(date, fullDate2, field.key)
                      : 0}
                  </span>
                  <MinusCircleOutlined
                    onClick={() => {
                      remove(field.name);
                    }}
                  />
                </Space>
              ))}

              <Form.Item>
                <Button
                  type="dashed"
                  onClick={() => {
                    add();
                  }}
                  block
                >
                  <PlusOutlined /> Add field
                </Button>
              </Form.Item>
            </div>
          );
        }}
      </Form.List>

来源:https://stackoverflow.com/questions/62769208/second-value-overrides-previous-in-reactjs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!