当前位置:首页 > React

react实现增删改

2026-01-26 19:31:14React

React 实现增删改功能

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

状态初始化

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

react实现增删改

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('');
};

删除功能

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

react实现增删改

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代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app npm…

react如何代码优化

react如何代码优化

减少不必要的重新渲染 使用 React.memo 包装函数组件以避免在 props 未变化时重新渲染。对于类组件,可以通过 shouldComponentUpdate 或继承 PureComponen…

react如何获取光标

react如何获取光标

获取光标位置的方法 在React中获取光标位置通常涉及处理输入框或文本区域的onChange或onSelect事件。以下是几种常见的方法: 通过selectionStart和selectionEnd…

react如何上传文件

react如何上传文件

使用React上传文件的方法 使用HTML的input元素和FormData 创建一个文件输入字段,通过onChange事件获取文件对象,使用FormData将文件数据发送到服务器。 import…

react如何下载包

react如何下载包

使用 npm 安装 React 包 在项目目录下运行以下命令,通过 npm 安装 React 核心库和 React DOM: npm install react react-dom 使用 yarn…

react如何删除节点

react如何删除节点

删除 React 节点的方法 在 React 中删除节点通常涉及更新组件的状态或条件渲染。以下是几种常见的方法: 条件渲染 通过条件判断控制节点的渲染。当条件为 false 时,React 不会渲…