[关闭]
@gyyin 2020-02-06T15:08:03.000000Z 字数 1044 阅读 288

设计一个新的状态管理库 —— rex

React


rex

基于redux和mobx思想的状态管理库 —— rex

设计思想

在使用了mobx之后,我深深爱上了mobx那种面向对象创建store的思想,对redux的view -> dispatch -> action -> reducer -> store -> view深恶痛绝,就开始思考如果用class来创建store,使用action来包裹action函数,底层调用dispatch使用action会怎么样?
于是,rex就诞生了。
image_1d8ncob8d1hki1gtmma21ol21hh99.png-36.4kB

state、action

装饰器state用来包裹需要监听的状态,而action则是包裹改变state的函数,在外部调用action包裹方法的时候,内部会自动调用dispatch函数,以确保通知view层状态发生了变化。
如果不用state包裹的属性,那么就会当做一个私有属性来处理,不会出现在store中。

BaseStore

BaseStore是一个基础类,在BaseStore中封装了很多私有函数,用于处理一些底层的逻辑。创建store的时候一定要继承这个基础的BaseStore类。

使用方法

  1. // 如何创建一个store
  2. import {
  3. action,
  4. state,
  5. BaseStore
  6. } from 'rex';
  7. class Counter extends BaseStore {
  8. @state count = 0;
  9. @action
  10. increase() {
  11. this.count += 1;
  12. }
  13. @action
  14. decrease() {
  15. this.count -= 1;
  16. }
  17. }
  18. const counter = Counter.createStore();
  19. export default counter;
  20. // 如何结合react-redux使用
  21. ReactDOM.render(
  22. <Provider store={counter}>
  23. <App />
  24. </Provider>,
  25. document.getElementById('app')
  26. )
  27. export default connect(state => ({
  28. count: state.count,
  29. increase: state.increase,
  30. decrease: state.decrease
  31. }))(props =>
  32. <div>
  33. <button onClick={() => props.increase()}>+</button>
  34. {props.count}
  35. <button onClick={() => props.decrease()}>-</button>
  36. </div>
  37. )

未完

等有时间了就继续把代码实现给补上。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注