You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ant Design表单如何同时传递元素ID与表单值?

在Ant Design Form的更新表单中同时传递item.id与表单值的实现方案

方法一:通过包装函数传递item.id

直接在onFinish中用箭头函数包装,将item.id作为额外参数传给updateRecord,同时接收表单提交的values。

修改后的Popup内表单代码:

<td>
  <Popup trigger={<Button>Edit</Button>} model nested>
    {close => (
      <div className='modal'>
        <Form 
          form={form} 
          onFinish={(values) => updateRecord(values, item.id)} 
          name="control-hooks" 
          layout="vertical"
          initialValues={{ email: item.email }} // 初始化表单为当前项的邮箱值
        >
          <Form.Item
            name="email"
            label="Email"
          >
            Current value: {item.email}
            <Input placeholder='Please enter Whitelist Email'/>
          </Form.Item>

          <Button
            type='primary'
            htmlType="submit"
            style={{margin:'0 0 0 8px'}}
            onClick={() => close()} // 提交后关闭弹窗,可选
          >
            Submit
          </Button>
        </Form>
      </div>
    )}
  </Popup>
</td>

修改后的updateRecord函数:

const updateRecord = async (values, itemId) => {
  try {
    setLoading(true);
    const result = await axios.post(window.adminAjaxUrl, qs.stringify({
      id: itemId,
      ...values,
      action: 'sv_whiteListEmail_update',
      _nonce: window.ajaxNonce,
    }));
    
    console.log(result);
    setLoading(false);
    // 根据返回状态处理提示
    switch (result['status']) {
      case 200:
        message.success(result['message']);
        break;
      case 500:
        message.error(result['message']);
        break;
      case 900:
        message.warning(result['message']);
        break;
      default:
        return ;
    }
  } catch (e) {
    setLoading(false);
    handleFormError(form, e.response.data);
  }
}

方法二:使用隐藏表单字段存储item.id

在表单中添加隐藏的Form.Item,将item.id作为初始值存入,这样onFinish返回的values会自动包含id字段,无需额外传参。

修改后的Popup内表单代码:

<td>
  <Popup trigger={<Button>Edit</Button>} model nested>
    {close => (
      <div className='modal'>
        <Form 
          form={form} 
          onFinish={updateRecord} 
          name="control-hooks" 
          layout="vertical"
          initialValues={{ 
            email: item.email,
            id: item.id // 把item.id存入隐藏字段
          }}
        >
          {/* 隐藏字段存储item.id */}
          <Form.Item name="id" hidden>
            <Input />
          </Form.Item>

          <Form.Item
            name="email"
            label="Email"
          >
            Current value: {item.email}
            <Input placeholder='Please enter Whitelist Email'/>
          </Form.Item>

          <Button
            type='primary'
            htmlType="submit"
            style={{margin:'0 0 0 8px'}}
            onClick={() => close()}
          >
            Submit
          </Button>
        </Form>
      </div>
    )}
  </Popup>
</td>

修改后的updateRecord函数:

const updateRecord = async (values) => {
  try {
    setLoading(true);
    const result = await axios.post(window.adminAjaxUrl, qs.stringify({
      ...values, // values已包含id和邮箱字段
      action: 'sv_whiteListEmail_update',
      _nonce: window.ajaxNonce,
    }));
    
    console.log(result);
    setLoading(false);
    // 状态提示处理
    switch (result['status']) {
      case 200:
        message.success(result['message']);
        break;
      case 500:
        message.error(result['message']);
        break;
      case 900:
        message.warning(result['message']);
        break;
      default:
        return ;
    }
  } catch (e) {
    setLoading(false);
    handleFormError(form, e.response.data);
  }
}

注意事项

  • 两种方法都要初始化表单为当前项的邮箱值,避免用户编辑时看不到原有内容。
  • 如果复用同一个form实例处理多个弹窗,建议在弹窗关闭时调用form.resetFields(),防止旧数据残留。

内容的提问来源于stack exchange,提问作者Rickyforcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:05:36