kangyana / daily-question

When your heart is set on something, you get closer to your goal with each passing day.
https://www.webpack.top
MIT License
3 stars 0 forks source link

【Q085】有没有用过其它状态管理器?以及原理 #85

Open kangyana opened 1 year ago

kangyana commented 1 year ago

mobx

kangyana commented 1 year ago

1. dva

dva 是一个基于 reduxredux-saga 的数据流方案。

为什么不使用 redux?

dva 正是用于解决这些问题。

dva 原理

dva 是基于 redux + redux-saga 的一层轻量封装,没有引入任何新概念,全部代码不到 100 行。

核心功能是提供了 app.model 方法,用于把 reducer, initialState, action, saga 封装到一起,例如:

app.model({
  namespace: 'products',
  state: {
    list: [],
    loading: false,
  },
  subscriptions: [
    function(dispatch) {
      dispatch({type: 'products/query'});
    },
  ],
  effects: {
    ['products/query']: function*() {
      yield call(delay(800));
      yield put({
        type: 'products/query/success',
        payload: ['ant-tool', 'roof'],
      });
    },
  },
  reducers: {
    ['products/query'](state) {
      return { ...state, loading: true, };
    },
    ['products/query/success'](state, { payload }) {
      return { ...state, loading: false, list: payload };
    },
  },
});

这对应使用 redux时,创建的 sagas/products.js, reducers/products.jsactions/products.js

介绍下 model