Rims - 换个方式使用 Redux

Rims-deck

即插即用的 reactredux 链接池, 提供与 react-redux 相同的 api.react

Why not react-redux ?

react 项目通常都由一颗 "组件树" 构成, 每一个组件变成了这棵树上的节点, react-redux 经过 context 做为中介与各个组件通讯git

react-redux.png

这就意味着若是有一个组件脱离了这颗树, 那么这个组件将没法与 store 通讯. 例如 一个特殊的弹框组件github

另外一方面, 对于一些较为特殊的 react 应用(即依靠浏览器或其余路由方式的多页面应用), 这样页面跳转后只能依靠数据持久化方式( sessionStorage localStorage 等)共享数据.npm

这种状况下, 因为基本上很难存在 根组件 的概念, react-redux 就显得无比乏力.redux

Why rims ?

rims 仅仅是在一些特殊场景下代替了 react-redux(仍是须要 redux)api

rims 能够与 react-redux 共存(同一组件不要同时使用两者的 connect), 可将 store 直接传入 createConnect, 只维护一个 store. => demo浏览器

实质上 rimsconnect 组件的结果是将组件直接与 store 相连bash

rims.png

使用 rims, 首先须要建立 store 和构建 connect 方法session

import { createConnect } from 'rims';
export default createConnect(store);
复制代码

createConnect(store) 就是咱们建立好的 connect 方法, 能够看出与 react-redux 使用不一样的地方在于: rims 须要自行建立 connectui

Quick Start

Installation

npm install --save rims
复制代码

or

yarn add rims
复制代码

Create store and connect

// createConnect.js
import { createStore } from 'redux';
import reducers from './reducers';
import { createConnect } from 'rims';

const store = createStore(reducers);

export default createConnect(store);
复制代码

须要建立一个新的文件, 用于建立 storecreateConnect

建立 store, 咱们仅替换了 react-redux, 好消息是若你此前配置过 store, 那么 store 不须要变更, 仅仅导出 createConnect 便可. 固然这也意味着咱们仍然能够用 redux 的生态: redux-thunk redux-logger redux-devtools 等.

Connect Components

import connect from './createConnect';

@connect(state => state)
class App extends React.Component{
  // ...
}
复制代码

多页面应用状态共享

经过状态数据持久化实现, 使用 redux-persist 实现状态数据持久化.

// createConnect.js
import { createStore } from 'redux';
import { persistStore, persistReducer } from 'redux-persist';
import reducers from './reducers';
import { createConnect } from 'rims';

const persistConfig = {
  key: 'root',
  storage: storageSession,
};

const persistedReducer = persistReducer(persistConfig, reducers);

const store = createStore(persistedReducer);

export default createConnect(store);
复制代码

最后

rims 仍然有许多不足, 若是你对 rims 感兴趣, 欢迎加入

=> get rims

相关文章
相关标签/搜索