You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:55:35