alibaba / rax

🐰 Rax is a progressive framework for building universal application. https://rax.js.org
Other
8k stars 627 forks source link

[BUG] @alifd/meet field parseName 数组下标赋值丢失 #2355

Open yiescc opened 2 years ago

yiescc commented 2 years ago

⌨️

Where is the bug from?

Fusion Mobile

Minimal code and steps to reproduce the bug

  const [state, setState] = useState({
    list: [
      {
        id: 1,
        name: "123"
      }
    ]
  });
  const field = Field.useField({
    values: {
      list: [
        {
          id: 1,
          name: "123"
        }
      ]
    },
    parseName: true,
    onChange: (name, value) => {
      console.log(name, value);
      console.log(111, field.getValues());
      setState(field.getValues());
    }
  });
  return (
    <div className="App">
      <Form field={field} labelAlign="left">
        {state?.list.map((item, itemIdx) => {
          return (
            <div
              key={item.id}
              className="mb-4 rounded-lg overflow-hidden bg-white"
            >
              <Form.Item label="名称" name={`list[${itemIdx}].name`}>
                <Input placeholder="请输入名称" />
              </Form.Item>
            </div>
          );
        })}
      </Form>
    </div>
  );

Current and expected behavior

Environment

最新

build.json

No response

Possible solution

No response

Additional context

No response

xmsz commented 2 years ago

我也遇到 不过感觉是跟动态有关

 <Form field={field}>
        <InputField name={'list[0].name'} style={{ display: 'none' }} />

        {list.map((item, itemIdx) => (
          <InputField name={`list[${itemIdx}].name`} key={item.id} />
        ))}

        <Form.Submit onClick={console.log}>提交</Form.Submit>
      </Form>

这样是可以生效的,如果我删除就不行

        <InputField name={'list[0].name'} style={{ display: 'none' }} />