Model API

action (Normal)

创建Normal Action

  1. class Test extends Model {
  2. modify = this.action((state, payload: any) => {
  3. state.id = payload;
  4. });
  5. }

action (Request)

创建Request Action

  1. class Test extends Model {
  2. fetch = service.post(() => {
  3. return this
  4. .uri('')
  5. .query()
  6. .body()
  7. .onPrepare()
  8. .onSuccess()
  9. .metaKey();
  10. });
  11. }

changeReducer

快速改变reducer而无需定义Normal Action

  1. class Test extends Model {
  2. demo() {
  3. const result = ...;
  4.  
  5. this.changeReducer((state) => {
  6. state.id = result.id;
  7. });
  8. }
  9. }

data

获取Reducer的数据,可以用在任何地方

  1. const mapStateToProps = () => {
  2. return {
  3. myProfile: testModel.data,
  4. };
  5. };
  6.  
  7. export default connect(mapStateToProps)(App);

useData

在Hooks组件中获取Reducer的数据,保证数据变更时可以重新渲染

  1. const App = () => {
  2. const myProfile = testModel.useData();
  3.  
  4. return <div>app</div>;
  5. };

isLoading

在hooks中,useXXX不能在条件中使用。而实际使用中,经常碰到多个loading的判断,比如:const loading = xx.useLoading() || yy.useLoading(),这样是会报错的。所以必须同时执行。

  1. const loading = Model.isLoading(xx.useLoading(), yy.useLoading());

register

注册reducer到Store中,默认自动注册

autoRegister

是否自动注册reducer到Redux-Store中,默认为true。如果关闭,就需要手动去注册

  1. createReduxStore({
  2. // 手动
  3. ...test.register(),
  4. });

effects

监听其他模型的Action

  1. class Test extends Model<Data> {
  2. protected effects(): Effects<Data> {
  3. return [
  4. xxx.yyy.onSuccess((state, action) => {
  5. state.id = action.payload.id;
  6. }),
  7. ];
  8. }
  9. }

!> 如果你的模型中包含了effects(),那么即使开启了autoReducer(),也需要手动去注册

onInit

模型被实例化时触发,与构造函数同时执行

onReducerCreated

当Store创建成功时被触发