写点什么

Recoil:面向 React 的新的状态管理库

  • 2020-06-02
  • 本文字数:853 字

    阅读完需:约 3 分钟

Recoil:面向React的新的状态管理库

Recoil是 Facebook 推出的一个全新的、实验性的 JavaScript 状态管理库,它解决了使用现有 Context API 在构建较大应用时所面临的很多问题。


因为 React 主要是一个 UI 库,开发人员通常会在使用 React 的同时使用一个状态管理方案以简化数据的处理。


很多现有的状态管理方案都是基于 React 在 2014 年引入的 Flux 架构的。然而,尽管像 Redux 和 MobX 这样的库能够确保应用的状态保持一致,但是对于很多应用来讲,它们所带来的开销是难以估量的。


为了解决这个问题,React 引入了一个简单的替代方案Context API,它允许开发人员通过组件树共享数据,而不必在每个级别手动传递属性。


Recoil 为开发人员提供了另外一个解决方案,这些开发人员可能想要避免使用那些已经成熟的状态管理系统,但是又觉得 Context API 太具局限性。


如官方文档所述,Recoil 通过解决 Context API 的三个问题实现了这一点。


  1. 组件状态只能通过往上推送至公共祖先来进行共享,这可能包含一个巨大的树,随后这个树需要重新渲染。

  2. Context 只能存储一个值,而不能存储一组不确定的值,让每个值都有自己的消费者。

  3. 以上两点使得将树的顶部(状态必须要存在的地方)与树的叶子(状态被使用的地方)进行代码分离变得非常困难。


Recoil 使用 Atom 和 Selector 来管理应用的数据。每个 Atom 包含一个唯一的键和一段它将要管理的数据,而每个 Selector 代表一个衍生状态,该衍生状态可以是基于多个 Atom 的。


关于如何组合这两者,有一个非常棒的样例,那就是流行的 todo 应用,它包含了两个 Atom 和一个 Selector。


为了管理应用的数据,我们创建了两个 Atom。第一个包括原始的列表项,而第二个包含了过滤器(“已完成”、“未完成”和“全部”等)。


为了展现这个 todo 列表,我们使用 Selector 基于选中的过滤器来过滤 todo 项。


关于完整的 todo 教程和良好的入门指南,请访问官方文档


Recoil 基于 MIT 许可证发布,可以通过GitHub获取。


请注意,Recoil 只是一个实验性的解决方案,还不能在生产环境的应用中使用。


原文链接:Recoil - a New State Management Library for React


2020-06-02 09:253383

评论

发布
暂无评论
发现更多内容

一文搞懂Go整合captcha实现验证码功能

闫同学

Go Web 安全 10月月更

Kafka的客户端NetworkClient如何发起的请求

石臻臻的杂货铺

Kafk 10月月更

如何在 Linux 上重新启动网络接口?

wljslmz

Linux 网络 网络接口 10月月更

网络协议与传输媒体

急需上岸的小谢

10月月更

还不会配置Python虚拟环境?看这篇就懂了

芥末拌个饭吧

后端 配置管理 python 3.5+ 10月月更

Linux下编写ENC28J60网卡驱动,完善网络设备框架

DS小龙哥

10月月更

「数仓建设篇」数仓主题域与主题划分实战

大数据阶梯之路

面试 数仓主题 数仓建设

PUTTY-0.75 下载安装及SSH远程连接方法

Yeats_Liao

后端 putty 10月月更

常见大数据应用场景

穿过生命散发芬芳

大数据 10月月更

ReentrantLock可重入、可打断、锁超时实现原理

JAVA旭阳

Java 并发 10月月更

用栈操作构建数组

掘金安东尼

算法 10月月更

JavaSE 抽象类和接口

whispar

接口 Java应用 10月月更

Apache RocketMQ 在阿里云大规模商业化实践之路

阿里巴巴云原生

Apache 阿里云 云原生 消息队列 商业化

百度面试题——迷宫问题(超详细解析)

lovevivi

c 数据结构 10月月更

Vue组件入门(六)派发事件的参数传递

Augus

Vue 3 10月月更

Ubuntu Server 20.04 LTS下载及安装教程

Yeats_Liao

ubuntu 后端 10月月更

Go语言开发小技巧&易错点100例(一)

闫同学

10月月更

搭建Linux下QT开发环境与Android开发环境(嵌入式与PC机)

DS小龙哥

10月月更

用Java实现计算器功能

魏铁锤

10月月更

JWT详解

Java学术趴

10月月更

协同开发时,如何科学的使用Git紧急修复线上bug?

王中阳Go

git 敏捷开发 团队协作 10月月更 git使用规范

Go做Web开发,有哪些必懂的概念和底层原理呢?

王中阳Go

Java php Go Web 10月月更

行业实践:RocketMQ 业务集成典型行业应用和实践

阿里巴巴云原生

阿里云 RocketMQ 云原生

super关键字的作用

魏铁锤

10月月更

Spring Boot「06」Loading initial data

Samson

Java spring 学习笔记 spring-boot 10月月更

朋友圈高性能复杂度分析

许四多

适用于 Linux 的 Windows 子系统(WSL)安装指南

Yeats_Liao

后端 wsl 10月月更

图解ReentrantLock的条件变量Condition机制

JAVA旭阳

Java 并发 10月月更

WeChat Moments Performance Analysis

David

架构实战营

【愚公系列】2022年10月 Go教学课程 029-面向对象简介

愚公搬代码

10月月更

如何提高项目的稳定性和开发效率呢?

王中阳Go

数据库 算法 框架 函数 10月月更

Recoil:面向React的新的状态管理库_大前端_Guy Nesher_InfoQ精选文章