React Js UseState 反模式
编写整洁的 React 代码需要智能的状态管理。糟糕的状态模式会导致 Bug 和复杂的代码。
避免以下四个常见错误:
- 将相关数据分组
不要为同时变化的数值创建独立的 state hook。
而不是:
const [x, setX] = useState(0);const [y, setY] = useState(0);
使用对象:
const [position, setPosition] = useState({ x: 0, y: 0 });
这能让你的更新保持整洁且有序。
- 避免冲突的状态
当多个布尔值追踪同一个流程时,就会产生 Bug。
与其使用:
isSubmittingisSubmit
使用单一的状态字符串:
status: 'TYPING'status: 'SUBMITTING'status: 'SUBMITTED'
从这个单一的事实来源(single source of truth)中推导出你的 UI 逻辑。
- 移除冗余状态
如果你可以在渲染期间计算出一个值,就不要把它放入 state 中。
不要存储:
firstNamelastNamefullName
只存储姓和名。在渲染时实时计算全名:
const fullName = firstName + " " + lastName;
此外,永远不要将 props 存储在 state 中。State 只会初始化一次。如果你的 prop 发生了变化,state 并不会随之更新。请直接使用该 prop。
- 停止数据重复
不要将相同的数据存储在两个不同的 state 中。
如果你有一个任务列表和一个选中的任务,不要在两个地方都存储整个任务对象。这会让更新变得困难。
相反:
- 存储任务列表。
- 只存储
selectedTaskId。 - 在渲染期间使用该 ID 从列表中查找任务。
这能确保你选中的任务始终与列表中的最新数据保持一致。
来源:https://dev.to/kkr0423/reactjs-usestate-antipatterns-58i9