Retalk,Redux 从未如此简单

简介: 它可以让你以异常简洁清晰的方式来书写 Redux,忘掉 Action types,忘掉 Action creators,再也不用考虑庞杂而烦人的样板代码。

简介

Retalk 是 Redux 的一个最佳实践,简单、轻量、流畅而智慧。

它可以让你以异常简洁清晰的方式来书写 Redux,忘掉 Action types,忘掉 Action creators,再也不用考虑庞杂而烦人的样板代码。

除此之外,Retalk 还支持异步引入页面 model(Code Splitting),以及对 loading 状态的自动处理。

特点

  • ️ 极简的 Redux 实践:model 中只需要书写 state 和 actions,如果你愿意。
  • 是的,只有两个 API:createStore 与 withStore(可选辅助函数),再无其它的繁杂概念。
  • ️ 异步引入 model:() => import() 用于代码分隔,store.addModel 用于将异步引入的 model 注入 store。
  • 自动 loading 处理:只需关注核心的 state 即可。

开始

使用 yarn 安装:


yarn add retalk

或者使用 npm:


npm install retalk

第 1 步:Store

store.js


import { createStore } from 'retalk';
import count from './count';

const store = createStore({
  count,
});

export default store;

第 2 步:Model

count.js (state, actions)


const count = {
  state: {
    count: 0,
  },
  actions: {
    add() {
      this.setState({ count: this.state.count + 1 });
    },
    async addAsync() {
      await new Promise(resolve => setTimeout(resolve, 1000));
      this.add();
    },
  },
};

export default count;

model 将 statereducer [可选]actions 聚在同一个文件里。

在 actions 中,使用 this.state 获取 state,使用 this.setState 更新 state,使用 this.actionName 调用其它 action,一切都如同 React 组件中的语法一样。

其它 model 的 state、reducer、action 呢?只需加上命名空间即可,比如 this.modelName.statethis.modelName.reducerNamethis.modelName.actionName

呃... 再没了,就只有这些。

当使用 Retalk 时,Redux 的 model 如此简单清晰。

第 3 步:View

App.js



import React from 'react';
import ReactDOM from 'react-dom';
import { Provider, connect } from 'react-redux';
import { withStore } from 'retalk';
import store from './store';

const Count = ({ loading, count, add, addAsync }) => (
  <div className={loading.addAsync ? 'loading' : 'done'}>
    The count is {count}
    <button onClick={add}>add</button>
    <button onClick={addAsync}>addAsync</button>
  </div>
);

const App = connect(...withStore('count'))(Count);

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root'),
);

如果一个 action 是异步的,你可以获取到 Retalk 自动添加的一个 loading state,loading.actionName,再不用去手动添加一个又一个 loading。

好吧,只需要 3 步,一个 Retalk 示例就呈现在眼前了。

还有什么呢?

1、我不想只写一模一样的 this.setState 去更新状态,我想使用不同的 reducers,可以吗?

当然没有问题:github.com/nanxiaobei/…

2、在 model action 的 this 中,有哪些东西呢?

一份完整的列表:github.com/nanxiaobei/…

3、如何动态引入 model,如何代码分隔?

这里有详细的介绍:github.com/nanxiaobei/…

还需要什么呢?自定义传入组件的 props?完整的 API 介绍?README 中你都可以找到答案。

最后

Retalk 实现了 100% 的代码测试覆盖,欢迎尝试。

如果有什么问题和建议,欢迎提 Issues。

如果喜欢,欢迎加个 。

总之,尝试一下,你将体验到独一无二的顺畅 Redux 开发体验~


GitHub 地址github.com/nanxiaobei/…

npm 地址www.npmjs.com/package/ret…



原文发布时间为:2018年07月02日
原文作者:南小北
本文来源:  掘金  如需转载请联系原作者
相关文章
|
6月前
|
JavaScript 中间件
简单描述一下redux-thunk的个人理解
简单描述一下redux-thunk的个人理解
32 0
|
JavaScript 前端开发 中间件
useReducer+createContext真的可以代替Redux吗?
useReducer+createContext真的可以代替Redux吗?
158 0
|
3月前
|
存储 JavaScript 前端开发
什么是 Redux?
【8月更文挑战第30天】
47 0
|
6月前
|
存储 JavaScript 前端开发
了解 redux 么,说一下 redux 吧
了解 redux 么,说一下 redux 吧
64 0
|
存储 JavaScript 前端开发
什么是Redux?
什么是Redux?
|
JavaScript 中间件
React-Redux-thunk
React-Redux-thunk
48 0
|
存储 JavaScript 中间件
React-Redux-Saga
React-Redux-Saga
28 0
|
JavaScript
Redux中 combineReducers的使用
Redux中 combineReducers的使用
|
JavaScript 前端开发 中间件
说说你对Redux的理解?和react-redux有什么区别?
说说你对Redux的理解?和react-redux有什么区别?
|
JavaScript 前端开发
什么是redux?如何在react 项目中使用redux?
什么是redux?如何在react 项目中使用redux?
104 0