当前位置:首页 > React

react实现增删改

2026-01-26 19:31:14React

React 实现增删改功能

在 React 中实现增删改(CRUD)功能是常见的需求,通常通过状态管理和事件处理来完成。以下是具体实现方法:

状态初始化

使用 useState 初始化数据状态和管理表单输入:

const [items, setItems] = useState([
  { id: 1, name: 'Item 1' },
  { id: 2, name: 'Item 2' }
]);
const [inputValue, setInputValue] = useState('');
const [editingId, setEditingId] = useState(null);

添加功能

通过表单提交事件将新项添加到状态数组:

const handleAdd = (e) => {
  e.preventDefault();
  if (!inputValue.trim()) return;

  const newItem = {
    id: Date.now(),
    name: inputValue
  };

  setItems([...items, newItem]);
  setInputValue('');
};

删除功能

通过过滤数组实现删除指定项:

const handleDelete = (id) => {
  setItems(items.filter(item => item.id !== id));
};

更新功能

分两步实现:先设置编辑状态,再提交更新:

const handleEdit = (item) => {
  setEditingId(item.id);
  setInputValue(item.name);
};

const handleUpdate = (e) => {
  e.preventDefault();

  setItems(items.map(item => 
    item.id === editingId 
      ? { ...item, name: inputValue } 
      : item
  ));

  setEditingId(null);
  setInputValue('');
};

完整组件示例

function CrudExample() {
  const [items, setItems] = useState([
    { id: 1, name: 'Item 1' },
    { id: 2, name: 'Item 2' }
  ]);
  const [inputValue, setInputValue] = useState('');
  const [editingId, setEditingId] = useState(null);

  const handleAdd = (e) => {
    e.preventDefault();
    if (!inputValue.trim()) return;

    const newItem = {
      id: Date.now(),
      name: inputValue
    };

    setItems([...items, newItem]);
    setInputValue('');
  };

  const handleDelete = (id) => {
    setItems(items.filter(item => item.id !== id));
  };

  const handleEdit = (item) => {
    setEditingId(item.id);
    setInputValue(item.name);
  };

  const handleUpdate = (e) => {
    e.preventDefault();

    setItems(items.map(item => 
      item.id === editingId 
        ? { ...item, name: inputValue } 
        : item
    ));

    setEditingId(null);
    setInputValue('');
  };

  return (
    <div>
      <form onSubmit={editingId ? handleUpdate : handleAdd}>
        <input
          value={inputValue}
          onChange={(e) => setInputValue(e.target.value)}
        />
        <button type="submit">
          {editingId ? 'Update' : 'Add'}
        </button>
      </form>

      <ul>
        {items.map(item => (
          <li key={item.id}>
            {item.name}
            <button onClick={() => handleEdit(item)}>Edit</button>
            <button onClick={() => handleDelete(item.id)}>Delete</button>
          </li>
        ))}
      </ul>
    </div>
  );
}

使用 useReducer 管理复杂状态

对于更复杂的状态逻辑,可以使用 useReducer

const initialState = {
  items: [],
  inputValue: '',
  editingId: null
};

function reducer(state, action) {
  switch (action.type) {
    case 'ADD_ITEM':
      return {
        ...state,
        items: [...state.items, action.payload],
        inputValue: ''
      };
    case 'DELETE_ITEM':
      return {
        ...state,
        items: state.items.filter(item => item.id !== action.payload)
      };
    // 其他 case...
    default:
      return state;
  }
}

// 在组件中使用
const [state, dispatch] = useReducer(reducer, initialState);

注意事项

  • 确保为列表项设置唯一的 key 属性
  • 复杂的表单验证建议使用 Formik 等库
  • 对于大型应用,考虑使用 Context API 或状态管理库(如 Redux)
  • 与后端交互时,注意异步操作的处理(如 axios 请求)

react实现增删改

标签: react
分享给朋友:

相关文章

react 如何引入jquery

react 如何引入jquery

安装 jQuery 库 在 React 项目中引入 jQuery 的第一步是安装 jQuery。可以通过 npm 或 yarn 安装: npm install jquery # 或 yarn a…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gree…

react如何销毁

react如何销毁

React 组件销毁的机制 在 React 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通…

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Contex…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

react如何验证

react如何验证

表单验证方法 在React中验证表单数据通常使用以下几种方式: 内置HTML5验证 利用HTML5原生表单验证属性如required、pattern等,结合form.noValidate属性禁用浏…