【实战】 八、用户选择器与项目编辑功能(下) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十五)
发布人:shili8
发布时间:2025-03-12 02:36
阅读次数:0
**八、用户选择器与项目编辑功能**
在上一篇文章中,我们已经完成了项目列表的展示和删除功能。现在,我们需要实现用户选择器和项目编辑功能,这是Jira类似产品的一个重要组成部分。
###1. 用户选择器用户选择器允许用户从一个列表中选择多个用户作为项目成员。我们将使用React Hook中的`useState`和`useEffect`来实现这个功能。
首先,我们需要定义一个状态变量来存储选中的用户:
typescriptimport React, { useState, useEffect } from 'react'; const [selectedUsers, setSelectedUsers] = useState([]);
然后,我们可以创建一个函数来更新选中的用户列表:
typescriptconst handleSelectUser = (user) => { const index = selectedUsers.indexOf(user); if (index !== -1) { setSelectedUsers((prevSelectedUsers) => prevSelectedUsers.filter((selectedUser) => selectedUser !== user) ); } else { setSelectedUsers((prevSelectedUsers) => [...prevSelectedUsers, user]); } };
接下来,我们需要在项目列表中渲染用户选择器:
typescriptconst ProjectList = () => { const [projects, setProjects] = useState([]); const [selectedUsers, setSelectedUsers] = useState([]); // ... return ( <div> {/* ... */} <ul> {users.map((user) => ( <li key={user.id}> <input type="checkbox" checked={selectedUsers.includes(user)} onChange={() => handleSelectUser(user)} /> <span>{user.name}</span> </li> ))} </ul> </div> ); };
###2.项目编辑功能项目编辑功能允许用户编辑项目的名称、描述和成员。我们将使用React Hook中的`useState`和`useEffect`来实现这个功能。
首先,我们需要定义一个状态变量来存储要编辑的项目:
typescriptconst [editingProject, setEditingProject] = useState(null);
然后,我们可以创建一个函数来更新要编辑的项目:
typescriptconst handleEditProject = (project) => { setEditingProject(project); };
接下来,我们需要在项目列表中渲染编辑按钮:
typescriptconst ProjectList = () => { const [projects, setProjects] = useState([]); const [editingProject, setEditingProject] = useState(null); // ... return ( <div> {/* ... */} {project.map((p) => ( <li key={p.id}> <button onClick={() => handleEditProject(p)}>编辑</button> {/* ... */} </li> ))} </div> ); };
当用户点击编辑按钮时,我们需要显示一个编辑表单:
typescriptconst ProjectList = () => { const [projects, setProjects] = useState([]); const [editingProject, setEditingProject] = useState(null); // ... if (editingProject) { return ( <div> {/* ... */} <form> <label> 名称: <input type="text" value={editingProject.name} onChange={(e) => handleUpdateName(e.target.value)} /> </label> <label> 描述: <textarea value={editingProject.description} onChange={(e) => handleUpdateDescription(e.target.value)} /> </label> <button type="submit">保存</button> </form> </div> ); } // ... };
### 总结在本篇文章中,我们实现了用户选择器和项目编辑功能,这是Jira类似产品的一个重要组成部分。我们使用React Hook中的`useState`和`useEffect`来实现这个功能。