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
在最外层包裹容器。
其他一些高级说明及设置可以看项目说明,具体有以下
在我看来,Redux 是一种代码设计模式,强调的是函数式编程,而状态管理只是 Redux 附带的一个功能
nycticorax 是纯粹的数据状态共享管理器,其工作模式非常直观简洁 dispatch
=> store
=> view
,也不用画图解释了
原理也很简单,就是一个事件订阅广播
至于性能,nycticorax 只有在绑定的 key 值发生变化时候才会更新对应组件,也就是最小化更新,性能不差
所以综上,我造这个轮子的原因也很明显了:我实在不想写大写字母的 actions
了,包括那些 effects
,@observer
等等,我只想安静的共享一些数据状态,然后在适当时候更新数据状态,更新对应的视图
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.