React中useContext实现待办清单:Context API使用正确性问询
React Context API 使用问题分析
你的代码里Context API的使用存在一些可优化的问题,具体如下:
1. 不必要的多Context拆分
你创建了ItemContext和ItemListContext两个独立Context,但这两个Context管理的都是待办清单的核心状态(输入值、待办列表),拆分后:
- 增加了组件消费Context的复杂度,需要两次调用
useContext - 后续扩展todo相关状态时,会持续新增Context,提升维护成本
建议将todo相关的状态和方法合并到一个Context(比如TodoContext)中统一管理。
2. Context未设置默认值
调用React.createContext()时未传入默认值,若组件意外脱离对应Provider的包裹范围,useContext会返回undefined,直接导致报错。
正确做法是给Context设置合理的默认值,示例:
// ItemContext.js export const ItemContext = React.createContext(["", () => {}]); // ItemListContext.js export const ItemListContext = React.createContext([[], () => {}]);
3. 状态更新写法不够严谨
handleDelete方法中直接依赖当前itemList生成新列表:
const handleDelete = (i) => { let newList = itemList.filter((item, index) => index !== i); setItemList(newList); };
这种写法在并发更新或多状态依赖场景下,可能获取到过期的itemList值。建议像hanleCLick那样使用函数式更新,确保拿到最新状态:
const handleDelete = (i) => { setItemList(prevList => prevList.filter((_, index) => index !== i)); };
额外代码优化建议
- TodoList组件承担了过多职责(输入处理、列表渲染、删除逻辑),建议拆分为
TodoInput、TodoItem等小组件,提升可读性与可维护性 - 注意拼写错误:
hanleCLick应改为handleClick
内容的提问来源于stack exchange,提问作者Rishav Bhattacharyya
相关产品推荐
相关产品推荐

