GMTC全球大前端技术大会(北京站)门票9折特惠截至本周五,点击立减¥480 了解详情
写点什么

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

2020 年 6 月 02 日

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 年 6 月 02 日 09:252064

评论

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

极客大学-架构师训练营

9527

鹰眼 | 分布式日志系统上云的架构和实践

小小的一朵云

大数据

Docker映射详解,没问题了!

程序员的时光

Docker

从linux源码看epoll

无毁的湖光

Linux TCP Linux Kenel

前端 10 问之 Docker (第一篇)

局外人

Docker

哦!这该死的 C 语言

cxuan

c 后端

数据结构与算法系列之数组

书旅

数据结构 算法 数组 数据结构与算法

PB级大规模Elasticsearch集群运维与调优实践

小小的一朵云

大数据

03 Spring Security 入门实例

哈库拉玛塔塔

Spring Boot kotlin spring security

区块链钱包app开发,去中心化多币种钱包搭建

WX13823153201

你必须要了解的「架构」小历史

小齐本齐

spring Spring Cloud Spring Boot

CountDownLatch 瞬间炸裂!同基于 AQS,凭什么 CyclicBarrier 可以这么秀?

程序员小航

Java 源码 AQS 源码阅读 CyclicBarrier

创建spring boot starter

曾彪彪

Java spring Boot Starter

为什么互联网巨头们纷纷使用Git而放弃SVN?(内含Git核心命令与原理总结)

冰河

git 冰河 代码管理 代码仓库 分支合并

程序的机器级表示-异构的数据结构

引花眠

计算机基础

图计算黑科技:打开中文词嵌入训练实践新模式

小小的一朵云

大数据

同城双活与异地多活架构分析

vivo互联网技术

架构 高可用 架构设计 高可用系统的架构

java中实现List集合中对象元素按其属性的中文拼音排序

Shae

简述C语言宏定义的使用

C语言与CPP编程

c c++ 编程语言

ARTS 打卡 (20.09.07-20.09.13)

小王同学

链表中移除重复节点,保罗·格雷厄姆的传奇博客,Mac三指拖动操作,大数据平台 John 易筋 ARTS 打卡 Week 17

John(易筋)

ARTS 打卡计划 大数据平台 链表移除相同节点 保罗格雷厄姆 mac三指操作设置

ASP.NET Core 性能优化最佳实践

newbe36524

微服务 性能优化 .net core ASP.NET Core

看动画学算法之:排序-快速排序

程序那些事

排序 快速排序 数据结构和算法 看动画学算法

智能商业时代的思考(二)网络协同抓住用户

刘旭东

微信 商业价值 数据智能 网络协同 商业智能

Mysql学习笔记:InnoDB事务和ACID模型

马迪奥

MySQL innodb

oeasy教您玩转 linux 010213 中文 fcitx

o

Elasticsearch索引容量管理实践

小小的一朵云

大数据

ARTS打卡Week 12

teoking

ARTS打卡 第16周

引花眠

微服务 ARTS 打卡计划

Spring 5 中文解析测试篇-Spring MVC测试框架

青年IT男

单元测试 Spring5

神盾首创非对称联邦学习,深度保障数据隐私

小小的一朵云

大数据

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