alibaba / ice

🚀 ice.js: The Progressive App Framework Based On React(基于 React 的渐进式应用框架)

Home Page:https://ice.work

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

effect里面如何获取到state里面的数据

oneQiu opened this issue · comments

我想在effect里面获取一些请求用的参数,不然每次都要传递进来,有没有直接获取state的

提供下示例代码

提供下示例代码
比如setState那个,我只需要传递state,reviewId是已经存在store里的,dispatch和this好像都没有state

const initialState: State = {
  versionFileId: 0,
  reviewId: 0,
  sizeFileId: 0,
  versionFiles: [],
  multiSizeFiles: [],
  versionNum: '',
  name: '',
  fileInfo: testFileInfo,
  comparisonFileInfo: testFileInfo,
  comments: [],
  state: 0,
  controller: {},
};

/**
 * 审片相关状态
 */
export default createModel({
  name: 'review',
  state: initialState,
  reducers: {
    update(state, payload: Partial<State>) {
      console.log('paylad', payload);
      Object.assign(state, payload);
    },
    setVersionFileId(state, payload: number) {
      state.versionFileId = payload;
    },
    setSizeFileId(state, payload: number) {
      state.sizeFileId = payload;
    },
  },
  effects: dispatch => ({
    /**
     * 初始化数据
     */
    async initialData(data: {
      reviewId: number;
      fileId: number;
      sizeFileId?: number;
    }) {
      console.log('qq', dispatch());
      const { reviewId, fileId, sizeFileId = 0 } = data;
      const [fileRes, sizeRes, commentsRes] = await Promise.all([
        ReviewAPI.getReviewFiles({ reviewId, fileId }),
        ReviewAPI.getMultiSizeFiles(reviewId),
        ReviewAPI.getComments({ reviewId, fileId }),
      ]);
      const { name, file, state, projectId, versionNum } = fileRes.data;
      const { file: multiSizeFiles } = sizeRes.data;
      const { comments } = commentsRes.data;
      this.update({
        versionFileId: fileId,
        sizeFileId,
        versionFiles: file,
        multiSizeFiles,
        state,
        versionNum,
        projectId,
        name,
        comments,
      });
    },
    /**
     * 修改状态
     */
    async setState(data: { reviewId: number; state: number }) {
      await ReviewAPI.setState(data);
      this.update({ state: data.state });
    },
  }),
});

我在第二个参数看到了,rootState,但是类型貌似不对,类型是当前的model,rootState 是需要自己去createStore实例取吗?

类型问题 我们修复下