152. 精读《recoil》

本文深入解析Facebook推出的Recoil数据流管理方案,探讨其在React全局状态管理中的应用,包括原子状态管理、派生数据、异步查询等功能,以及与Redux、Mobx的对比。

1 引言

Recoil 是 Facebook 公司出的数据流管理方案,有一定思考的价值。

Recoil 是基于 Immutable 的数据流管理方案,这也是它值得被拿出来看的最重要原因,如果要用 Mutable 方式管理 React 数据流,直接看 mobx-react 就足够了。

然而 React Immutable 特性带来的可预测性非常利于调试和维护:

  1. 断点调试时变量的值与当前执行位置无关,已创建过的值不会突然 Mutable 突变,非常可预测。

  2. 在 React 框架下组件更新机制单一,只有引用变化才触发重渲染,而没有 Mutable 模式下 ForceUpdate 的心智负担。

当然 Immutable 模式下存在一定编码心智负担,所以各有优劣。

但 Recoil 和 Redux 一样,并不代表 React 官方数据流管理方案,因此不用带着官方光环去看它。

2 简介

Recoil 解决 React 全局数据流管理的问题,采用分散管理原子状态的设计模式,支持派生数据与异步查询,在基本功能上可以覆盖 Redux。

状态作用域

和 Redux 一样,全局数据流管理需要存在作用域 RecoilRoot

import React from "react";
import { RecoilRoot } from "recoil";

function App() {
  return (
    <RecoilRoot>
      <CharacterCounter />
    </RecoilRoot>
  );
}

RecoilRoot 在被嵌套时,最内层的 RecoilRoot 会覆盖外层的配置及状态值。

定义数据

与 Redux 集中定义 initState 不同,Recoil 采用 atom 以分散方式定义数据:

const textState = atom({
  key: "textState",
  default: "",
});

其中 key 必须在 RecoilRoot 作用域内唯一,也可以认为是 state 树打平时 key 必须唯一的要求。

default 定义默认值,既然数据定义分散了,默认值定义也是分散的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值