在日常的工作与生活中,我们经常需要创建一个待办事项列表,以便跟踪我们需要完成的任务。这篇文章将展示如何使用React的Hooks和函数式组件来实现一个基本的待办事项列表(TodoList)。我将一步步带你实现以下功能:新增、删除和编辑待办事项,也就是增删改查(CRUD)。
项目搭建
初始化组件
首先,我们需要创建一个React函数式组件。在这个组件中,我们将使用React的useState hook来管理待办事项列表的状态。
const [todos, setTodos] = useState<string[]>([])
添加功能
接下来,我们将实现添加新的待办事项的功能。当用户点击“添加”按钮时,我们将向待办事项列表中添加一个新的空项。
const [newTodo, setNewTodo] = useState('');
const handleAdd = (input: string) => setTodos([...todos, input])
删除功能
然后,我们将实现删除待办事项的功能。当用户点击待办事项旁边的“删除”按钮时,我们将从待办事项列表中删除该项。
const handleDelete = (index: number) => {
setTodos(todos.filter((_, index2) => index2 !== index))
}
编辑功能
最后,我们将实现编辑待办事项的功能。当用户点击待办事项旁边的“编辑”按钮时,我们将弹出一个对话框让用户输入新的待办事项内容,并更新列表。
const handleEdit = () => {
setVisible(true)
}
const handleConfirm = (index: number, newValue: string) => {
const newTodos = [...todos];
newTodos[index] = newValue;
setTodos(newTodos);
}
const handleCancel = () => {
setVisible(false)
}
最终效果
最终效果如下图:
复盘总结
在青训营学习React的过程中,我感受到了hooks的便捷性与灵活性,在此之前我只在vue2中使用过与hooks类似的mixins,但是,相比于mixins,hooks可以更好地复用状态,内部的变量在闭包内,返回的变量支持定义别名,不用担心重名和覆盖种种问题,而且代码高度聚合,可阅读性提升,随之而来是效率提升,bug变少。 此外,hooks写法直接告别了class类组件中使用this带来的种种问题,比如.bind(this),大大减轻了开发者的心智负担。 在之后的开发过程中,我会进一步将TodoList中的各项todo拆分成一个单独的组件TodoItem,以更好地扩展todo的功能,缩小粒度,减轻开发与维护的心智负担。
备注
本篇文章是我在字节跳动青训营中学习的基础上所编写的,所展示的例子较为简陋,只能抛砖引玉,希望各位大佬不吝赐教。