本专栏致力于分析热门项目,如果本文对你有帮助的话,那么你的点赞 or 关注 对我来说很重要,感谢。
温馨提示:建议在电脑上看更合适。
状态管理是 React 应用的核心。React 18 在状态管理方面没有引入革命性的变化,但它确实通过引入新的特性如 Concurrent Mode 和 Suspense 边界,进一步增强了状态管理的灵活性和效率。
状态管理的理念
不可变性
- 使用新对象代替修改现有对象:当组件的状态发生变化时,我们通常会创建一个新的对象来代表新的状态,而不是修改现有的对象。这样做的好处是,由于状态不可变,React 可以更容易地追踪状态的变化,确定何时重新渲染组件,并且可以更好地利用性能优化策略。
- 保持状态和属性的不变性:在组件的生命周期中,我们通常会将状态(state)和属性(props)视为只读的数据源。这意味着我们在组件内部不应直接修改这些值,而是通过更新状态(setState)来触发重新渲染,并在重新渲染时提供新的状态或属性值。
异步更新
状态更新通常是异步的
组件化
状态管理应当与组件化的设计模式相结合,每个组件应尽可能独立地管理自己的状态,只有当必要时才共享状态。
单一数据源
尽可能将共享状态集中管理,避免多个组件持有相同状态的不同副本,这样可以减少状态冲突的可能性。
可预测性
React 强调状态变更应该是可预测的,这意味着状态应当只通过明确的路径进行修改,避免在不必要的地方修改状态。
状态管理的实现
Hooks
React 18 继续支持 useState, useReducer, useContext 等 Hooks,允许开发者在函数组件中使用状态管理。useState 提供了一个简单的方式来管理组件内部的状态,而 useReducer 更适合管理具有复杂逻辑的状态。
Context API
Context API 仍然是在组件树之间传递状态的有效工具,它可以帮助减少 prop-drilling的问题,即不需要将状态逐层传递给每一个需要它的组件。
Concurrent Mode
React 18 引入了并发模式的支持,这意味着 React 可以开始、暂停、恢复或取消渲染工作。这为状态管理和渲染过程提供了一个新的维度,使得 React 能够更好地利用现代浏览器的能力来进行高效的渲染。
Suspense
React 18 增加了 Suspense 边界,这是一种新的机制,允许组件在等待数据加载完成之前挂起(即暂停渲染),直到数据准备就绪。本质上讲Suspense内的组件子树比组件树的其他部分拥有更低的优先级,是react基于Concurrent Mode的玩法
useTransition Hook
用于控制动画过渡,并允许开发者标记某些状态更新为不那么紧急,从而让 React 更智能地调度这些更新。
useId Hook
提供了一种生成唯一标识符的方法,这对于状态管理中的持久化和跟踪非常有用。
startTransition
帮助你控制更新的优先级和用户体验。
关于作者
作者:Wandra
内容:算法 | 趋势 |源码|Vue | React | CSS | Typescript | Webpack | Vite | GithubAction | GraphQL | Uniqpp。
专栏:欢迎关注呀🌹
本专栏致力于分析热门项目,如果本文对你有帮助的话,那么你的点赞 or 关注 对我来说很重要,感谢。