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

在React+Reactstrap环境下如何将输入的表单数据添加到表格行?

React + Reactstrap 表单添加数据到表格实现方案

核心思路是通过React状态驱动UI渲染,不要手动操作DOM插入节点,所有表格数据用状态统一管理:

步骤1:声明所需状态

在函数组件顶部引入useState,声明两个状态分别管理表单输入值和表格数据列表:

import { useState } from 'react';
import { Row, Col, FormGroup, Label, Input, Button, CardBody, Table } from 'reactstrap';

// 组件内部
const YourComponent = () => {
  // 表单输入状态
  const [formData, setFormData] = useState({
    proName: '',
    storeName: '',
    pPrice: ''
  });
  // 表格数据列表状态
  const [tableData, setTableData] = useState([]);

步骤2:实现表单双向绑定逻辑

给每个输入框绑定value和onChange事件,同步输入内容到表单状态,同时修正原代码中输入框type属性的错误(原代码把字段名写在了type位置,实际应该是text/number类型):

// 输入框内容变化时更新表单状态
  const handleInputChange = (e) => {
    const { name, value } = e.target;
    setFormData(prev => ({...prev, [name]: value}));
  };

  // 添加按钮点击逻辑
  const handleAdd = () => {
    // 简单非空校验
    if (!formData.proName.trim() || !formData.storeName.trim() || !formData.pPrice.trim()) return;
    // 追加新数据到表格列表,返回新数组触发重渲染
    setTableData(prev => [...prev, {...formData}]);
    // 清空表单
    setFormData({proName: '', storeName: '', pPrice: ''});
  };

步骤3:修改JSX结构

表单部分绑定事件,表格部分遍历状态渲染行:

return (
    <>
      {/* 表单部分 */}
      <Row form>
        <Col md={6}>
          <FormGroup>
            <Label for="proName">Product Name</Label>
            <Input 
              type="text" 
              name="proName" 
              id="proName" 
              placeholder="Product Name"
              value={formData.proName}
              onChange={handleInputChange}
            />
          </FormGroup>
        </Col>
        <Col md={6}>
          <FormGroup>
            <Label for="storeName">Store Name</Label>
            <Input 
              type="text" 
              name="storeName" 
              id="storeName" 
              placeholder="Store Name"
              value={formData.storeName}
              onChange={handleInputChange}
            />
          </FormGroup>
        </Col>
        <Col md={6}>
          <FormGroup>
            <Label for="pPrice">Price</Label>
            <Input 
              type="number" 
              name="pPrice" 
              id="pPrice" 
              placeholder="Price"
              value={formData.pPrice}
              onChange={handleInputChange}
            />
          </FormGroup>
        </Col>
      </Row>
      {/* 添加按钮 */}
      <Button color="primary" onClick={handleAdd}>添加</Button>

      {/* 表格部分 */}
      <CardBody>
        <Table className="tablesorter" responsive>
          <thead className="text-primary">
            <tr>
              <th>Store</th>
              <th>Product</th>
              <th>Price</th>
            </tr>
          </thead>
          <tbody id="tbid">
            {/* 遍历表格数据渲染行 */}
            {tableData.map((item, index) => (
              <tr key={index}>
                <td>{item.storeName}</td>
                <td>{item.proName}</td>
                <td>{item.pPrice}</td>
              </tr>
            ))}
          </tbody>                 
        </Table>
      </CardBody>
    </>
  )
}

export default YourComponent;

注意事项

  • 不要用原生JS操作#tbid插入DOM节点,React会根据状态自动更新UI
  • 生产环境建议给每条表格数据加唯一id作为遍历的key,替代示例中的索引值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:54:03