nycticorax 是一个 JavaScript 应用状态管理器,并且默认集成 React 使用
在 React 上使用非常简单,只需要用 connect 这个 API,没有 Provider,reducer,action 等概念
同时也有在内部 /个人的一些项目上使用了,感觉不错
使用
0.首先要安装吧
$ npm i nycticorax
1.创建 store,正常的操作了。当然也可以忽略这个步骤,不创建 store,不检查数据类型以及是否存在当前 key,非常自由吧 :)
import { createStore } from 'nycticorax'
createStore({ name: 0 })
2.然后需要关联起 view 跟 store 吧,不然咋知道那些需要视图更新
import { connect } from 'nycticorax'
function A({ dispatch, name }) { // connect 过的组件可以使用 dispatch
return (
<div>
<p>{name}</p> {/* 使用 store name 的值 */}
<button
onClick={() => dispatch({ name: 1 })} {/* 这里 dispatch 改变 store 里的 name 的值为 1 */}
>
set
</button>
</div>
)
}
export default connect('name')(A) // 这里是 connect,表示需要使用 stire 中的 name 的值
然后就这样可以啦,也不需要像 Redux 那样需要 Provider 在最外层包裹容器。
其他
其他一些高级说明及设置可以看项目说明,具体有以下
- 严格模式 /非严格模式
- 不同的实例
- 同步 /异步
- UMD 使用
- 非 React 下使用
对比 Redux
在我看来,Redux 是一种代码设计模式,强调的是函数式编程,而状态管理只是 Redux 附带的一个功能
nycticorax 是纯粹的数据状态共享管理器,其工作模式非常直观简洁 dispatch => store => view,也不用画图解释了
原理也很简单,就是一个事件订阅广播
至于性能,nycticorax 只有在绑定的 key 值发生变化时候才会更新对应组件,也就是最小化更新,性能不差
所以综上,我造这个轮子的原因也很明显了:我实在不想写大写字母的 actions 了,包括那些 effects,@observer 等等,我只想安静的共享一些数据状态,然后在适当时候更新数据状态,更新对应的视图