CyanX 基于ReactHook的状态管理器,遵循函数式编程的理念,极简、可扩展设计哲学上手
时间:2022-07-22
本文章向大家介绍CyanX 基于ReactHook的状态管理器,遵循函数式编程的理念,极简、可扩展设计哲学上手,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
CyanX
CyanX是一款基于ReactHook的,针对函数式组件的极简、可扩展的状态管理器
设计哲学——任何状态,无论在哪都应该简单快速地获得
特性
- 极简,1分钟上手,两行代码
- 无限层级叠加,告别组件之间复杂的传值
- 极低的内存消耗,数据按需加载,组件所需的状态值变化时,才会重新渲染
- 基于ReactHook,仅支持React函数式组件开发
兼容环境
现代浏览器和 IE11
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KFbntbYc-1597115377927)(README_files/1.png)]
安装
- npm
$ npm install cyanx
- yarn
$ yarn add cyanx
核心概念
Public Store(公用仓库)
存放多个组件均需使用的状态的仓库
存放的数据类型
- 值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol
- 引用数据类型:对象(Object)、数组(Array)、函数(Function)
- 函数方法
withCyanxObserver(观察者)
观察指定的公用仓库&使用此公用仓库中状态的可观察组件,当公用仓库的某个状态值发生变化时,会重新渲染使用了此状态的可观察组件
withCyanxObserver(component, publicStoreName, publicStoreDefaultValues)
是一个高阶组件HOC,有3个参数
参数名 |
是否必填 |
说明 |
---|---|---|
component |
*必填 |
需转化为观察者的组件 |
publicStoreName |
*必填 |
需观察公用仓库的名称 |
publicStoreDefaultValues |
*必填 |
公用仓库的默认值 |
withCyanxObservable(可观察的)
将组件转为可观察状态,并得到所需的公用仓库的状态(存于props中),当使用的公用仓库的状态值改变时,将自动重新渲染,并得到最新的公用仓库的状态
withCyanxObservable(component, publicStoreName, stateKeyArray)
是一个高阶组件HOC,有3个参数
参数名 |
是否必填 |
说明 |
---|---|---|
component |
*必填 |
需转化为可观察的组件 |
publicStoreName |
*必填 |
需引入的公用仓库的名称 |
stateKeyArray |
选填 |
组件需引用的公用仓库中状态的Key名称,引入的state会直接存入可观察组件的props中 |
dispatch(调遣)
dispatch是一个函数function,用于改变公用仓库的状态
特征
- 每一个公用仓库都会有唯一一个dispatch函数
- dispatch会存在可观察组件的props中,函数名为
${公用仓库的名称}Dispatch
;或可观察组件的props中的名为${公用仓库的名称}
的对象。此中有dispatch
的元素 例子:有一个公用仓库publicStore
,可观察组件C
观察了公用仓库publicStore
;可观察组件C
获取公用仓库publicStore
的dispatch
可以通过一下两种方式拿到:props.publicStoreDispatch
||props.publicStore.dispatch
- dispatch改变状态的规则,同React中的setState()函数
实例
常量
// 公用仓库的名称
const PublicStoreName = 'publicStore';// 公用仓库的名称,自己定义
// 公用仓库默认值
const publicStoreDefaultValues = {
a: 1,
b: {},
c: ()=>{},
}
设置观察者组件&需观察的公用仓库
import { withCyanxObserver } from 'cyanx';// 引入观察者HOC
// 观察者组件
const ComponentObserver = () => {
...
return (
<>
<ComponentObservable />
</>
)
}
export default withCyanxObserver(ComponentObserver, PublicStoreName, publicStoreDefaultValues);
转化可观察组件&组件所需的公用仓库的状态
import { withCyanxObservable } from 'cyanx';// 引入可观察的HOC
// 观察者组件
const ComponentObservable = ({a, b, c, publicStoreDispatch, ...props}) => {...}
||
const ComponentObservable = (props) => {
const {a, b, c, dispatch} = props.publicStore;
}
export default withCyanxObservable(ComponentObservable, PublicStoreName, ['a', 'b', 'c']);
注意事项
出于内存的考虑,建议观察者组件的下1级的子组件均转化成可观察组件
GitHub
https://github.com/Bholder/CyanX
License
MIT
Copyright © 2020-present, Bholder CY
- ExpandableListView实现商品列表折叠
- Swift 3.0介绍
- IntelliJ IDEA 安装目录的核心文件讲解
- 详述 IntelliJ IDEA 的使用界面
- WCF系列教程之消息交换模式之请求与答复模式(Request/Reply)
- Koa-router源码解读
- WCF系列教程之初识WCF
- IntelliJ IDEA 缓存和索引的介绍及清理方法
- Node.js原理
- WCF系列教程之WCF消息交换模式之单项模式
- React Native调用Android相机图库
- IntelliJ IDEA 之 HelloWorld 项目创建及相关配置文件介绍
- 设置 IntelliJ IDEA 主题和字体的方法
- 修改 IntelliJ IDEA 模板注释中的 user 内容
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Pytorch实现卷积神经网络训练量化(QAT)
- VBA解压缩ZIP文件11——存在问题
- 算法集锦(14)|图像识别| 图像识别算法的罗夏测试
- CenterNet骨干网络之hourglass
- 语音识别中的声学特征提取:梅尔频率倒谱系数MFCC | 老炮儿改名PPLOVELL | 5th
- 基于Apriori的数据关联分析 | 工业数据分析 | 冰水数据智能专题 | 4th
- 基于FP树的频繁项挖掘 | 工业数据分析 | 冰水数据智能 | 5th
- ICCV2019 高通Data-Free Quantization论文解读
- VBA解压缩ZIP文件10——解压-动态Huffman
- 海思NNIE之PFPLD训练与量化
- [译] 用 Truffle 插件自动在Etherscan上验证合约代码
- 二层网络上的以太坊智能合约: Optimistic Rollup
- 基于决策树的工业数据分类——数据智能
- Kestrel的ListenAnyIP和ListenLocalhost的区别
- 【为宏正名】什么?我忘了去上“数学必修课”!