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

React中如何将boxId传递至编辑组件以填充表单?

解决Ant Design表格传递boxId到编辑组件的问题

核心修复:给Operations列的render函数添加record参数

Ant Design Table的列配置中,render函数默认第一个参数就是当前行的record对象(包含该行所有数据),你之前未接收这个参数,所以无法获取boxId。按以下方式修改列配置:

import { Link } from 'react-router-dom';
import { Table } from 'antd';

// 表格列配置
const columns = [
  // 示例列:展示boxId
  {
    title: 'Box ID',
    dataIndex: 'boxId',
    key: 'boxId'
  },
  {
    title: '操作',
    key: 'operations',
    // 接收record参数,拿到当前行的boxId
    render: (record) => (
      // 动态拼接路由路径,将boxId传入
      <Link to={`/edit/${record.boxId}`}>编辑</Link>
    )
  }
];

// 表格使用示例
<Table 
  columns={columns} 
  dataSource={yourDataSource} // 你的数据源数组,每个元素需包含boxId字段
  rowKey="boxId" // 用boxId作为行唯一标识,避免控制台警告
/>

编辑组件获取boxId并填充Formik表单

在编辑组件中,通过路由参数提取boxId,请求数据库数据后设置为Formik的初始值:

import { useParams } from 'react-router-dom';
import { useEffect, useState } from 'react';
import { Formik, Form, Field } from 'formik';
// 这里用axios做示例,你可以替换成自己的请求库
import axios from 'axios';

const EditBox = () => {
  // 从路由参数中获取boxId
  const { boxId } = useParams();
  // 存储表单初始值
  const [initialFormValues, setInitialFormValues] = useState({});

  useEffect(() => {
    // 当boxId存在时,请求对应数据
    if (!boxId) return;

    const fetchBoxData = async () => {
      try {
        const res = await axios.get(`/api/boxes/${boxId}`);
        // 将接口返回的数据设置为Formik的初始值
        setInitialFormValues(res.data);
      } catch (err) {
        console.error('获取数据失败:', err);
      }
    };

    fetchBoxData();
  }, [boxId]);

  return (
    <Formik 
      initialValues={initialFormValues}
      onSubmit={(values) => {
        // 处理表单提交逻辑,比如将修改后的数据提交到后端
        console.log('提交的编辑数据:', values);
      }}
    >
      <Form>
        {/* 根据你的数据结构添加对应表单字段 */}
        <Field name="boxId" placeholder="Box ID" disabled />
        <Field name="boxName" placeholder="箱子名称" />
        <Field name="boxDesc" placeholder="箱子描述" />
        
        <button type="submit">保存修改</button>
      </Form>
    </Formik>
  );
};

export default EditBox;

补充:配置动态路由

确保你的路由配置中设置了动态参数,这样boxId才能被正确解析:

import { Routes, Route } from 'react-router-dom';
import EditBox from './components/EditBox';

function App() {
  return (
    <Routes>
      {/* 其他路由配置 */}
      <Route path="/edit/:boxId" element={<EditBox />} />
    </Routes>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:50:25