React 你还在用 Redux 吗?更简化的状态管理工具(Recoil)

以往传统的 Redux 状态管理工具使用起来代码太过于复杂。

你需要通过纯函数触发 action 再去修改 data 中定义的数据,而且要通过接口请求数据还需要借助 redux - think 这个中间件才能完成。。。

更加方便使用的工具:Recoil ~ 由 facebook 推出契合 React 的状态管理

它的定义方式和 useState 这个 HOOK 非常像,你可以更加简化的完成你的全局数据共享

pnpm install recoil yarn install recoil npm install recoil

安装好这个工具之后直接开始使用,需要引入之后包裹你的根组件

javascript 复制代码
import React from 'react';

// 引入 Recoil 在 main.tsx 中包裹住你的根组件
import {
  RecoilRoot,
  atom,
  selector,
  useRecoilState,
  useRecoilValue,
} from 'recoil';


function App() {
  return (
    // 此处包裹
    <RecoilRoot>
      <CharacterCounter />
    </RecoilRoot>
  );
}

这一步做好之后,你可以在 src 文件之下定义 store(仓库)文件夹,名字随便起,按照自己喜欢的来(前提取的名字不要太骚被你的领导叫去喝茶)

它有两种定义数据的方式:

1. atom

2. selector

(在你创建好的文件夹下面创建 .js || .ts文件,比如我需要一个固定的管理员枚举,不会被修改)

**1)**第一种 atom 的形式

default 中可以写任何数据结构,数组 对象 字符串 数字等等等等

你要使用怎么办?

import { adminEnum } from '@/store/adminEnumObject'

直接在组件里面引入它,'@/store/adminEnumObject' 就是我创建好的管理员枚举文件

import { useRecoilValue } from 'recoil'

同时引入 recoil 身上的 useRecoilValue 方法,可以获取你定义的 atom || selector 中的指定数据 (是不是跟 HOOK 的写法非常像)

const adminUser = useRecoilValue(adminEnum)

接着用 useRecoilValue 方法包裹你引入的文件,将它赋值给一个变量,你通过这个变量就可以访问到他身上的所有属性了。

注意:atom 定义的数据在刷新页面会自动丢失,除非将数据写成死的,一般用于固定的枚举。

**2)**第二种 selector 的形式

这种定义方式就较为🐂🍺了,因为它内部采用发布订阅的模式

(这种形式定义的数据也会在刷新的同时全部丢失,是可以避免的。请继续往下看)

它带有一个 get 属性,你可以在它内部调用接口,return 出来的数据就会赋值给你这个变量

它只是一个定义的数据啊,那接口我不还得自己调用吗?

如果说你在当前页面的组件里面使用到了这个数据,他就会自动调用 get 中的接口,完成数据返回

我这里使用到了 dictValuesSelector 并且这个页面已经渲染到浏览器了,它就会自动开始调用接口。

上面说的刷新会丢失数据的问题,你只要在当前页面用到了 Recoil 定义的 selector 它就会自动重新请求,永远不会出现数据突然丢失的问题!

并且你也可以给返回的数据写上 TS 的类型!!这样你的其他前端小伙伴在使用的时候可以更加快速的找到需要的字段信息。

时小记,终有成。

相关推荐
泯泷7 小时前
手搓JSVM第 12 篇:完整最小 JSVM 实现与源码设计复盘
前端·javascript·前端框架
默_笙7 小时前
🍔 给 AI 发一张结构化表格(下):从"自由发挥"到"按格填空"的输出驯服指南
前端·javascript
泯泷7 小时前
手搓JSVM第 11 篇:打包、模块与 CLI:把 VM 产物变成可运行文件
前端·javascript·前端框架
泯泷7 小时前
手搓JSVM第 10 篇:对象、数组与属性访问
前端·javascript·前端框架
泯泷7 小时前
手搓JSVM第 9 篇:闭包:函数如何记住外部变量
前端·javascript·前端框架
晴天168 小时前
前端 SSR、BFF 原理介绍
前端·javascript·网络·html
全栈技术负责人8 小时前
AI 效能工具建设:Agent 可观测性技能技术方案与实践
前端·ai·ai编程
梦想平凡9 小时前
百游棋牌源代码开发搭建教程(一):全端工程结构、开发环境配置与首次启动验证
前端·javascript·源代码管理
妙码生花9 小时前
两个月 59 篇 AI 开发日志 + Golang 商业级实战项目收工后,得来的 AI 使用心法-上
前端·后端·gin
vx-Biye_Design9 小时前
springboot中国传统节日宣传平台49078-计算机课程设计、毕业设计
java·前端·vue.js·spring boot·后端·课程设计·idea