最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】Antd Pro中始终显示loading加载无法完成消失掉

加载 crifan 2208浏览 0评论
折腾:
【未解决】Django出错:TypeError: object of type ‘ManyRelatedManager’ has no len()
期间,结果现在遇到个问题:
Antd Pro中,loading始终显示,无法完成和消失掉:
而之前是正常的,没有出现这个问题。
此处也去看了Django后台接口,并不是后端接口有问题导致的。
看了看Antd中的代码:
@connect(({ script, topic, functionGroup, loading }) => ({
  script,
  topic,
  // currentUser: user.currentUser,
  functionGroup,
  loading: loading.models.script,
}))
  render() {
    const { script: { scripts }, loading } = this.props;
            <SimpleTable
              loading={loading}
              data={scripts}
              columns={columns}
              scroll={{ x: 1800 }}
              onChange={this.handleStandardTableChange}
            />
好像并没有什么问题啊
后来发现router中的connect的参数和页面内部的变量没有完全对应。
然后改为对应的:
src/common/router.js
    '/script/all-script-list': {
      component: dynamicWrapper(app, ['script', 'topic', 'functionGroup'], () => import('../routes/Script/AllScriptList')),
    },
src/routes/Script/AllScriptList.js
@connect(({ script, topic, functionGroup, loading }) => ({
  script,
  topic,
  functionGroup,
  loading: loading.models.script,
}))
其中内部也有:
    dispatch({
      type: 'topic/fetch',
      payload: params,
    });
  updateScriptList(payload = {}){
    console.log("updateScriptList: payload=", payload)
    const { dispatch } = this.props

    dispatch({
      type: 'script/fetch',
      // payload: payload,
      payload,
    });
  }
然后也基本上有点理解了loading的大概逻辑:
【Antd Pro中loading显示正在加载的基本逻辑】
除了上面的router中connect把props中的loading传递进来后
然后loading映射到loading.models.script指的是models中script.js:
src/models/script.js
其中里面的:
import { message } from 'antd';
import { queryScripts,
         queryGroupOwnerScripts,
         queryScript,
         scriptWordExport,
         createScript,
         updateScript,
         queryScriptDialogs,
         queryScriptHistories,
         createScriptReview,
         queryUserScriptsCount,
         deleteScript,
} from '../services/api';

export default {
  namespace: 'script',

  state: {
    scripts: {},
    groupOwnerScripts: {},
    script: {},
    dialogs: {},
    histories: {},
    userScriptsCount: {},
  },

  effects: {
    *fetch({ payload }, { call, put }) {
      const response = yield call(queryScripts, payload);
      console.log("script fetch queryScripts: response=", response)

      yield put({
        type: 'queryList',
        payload: Array.isArray(response.results) ? response : [],
      });
    },

...

  reducers: {
    queryList(state, action) {
      return {
        ...state,
        scripts: action.payload,
      };
    },
    ...
  }
真正去完成了 调用queryScripts
/src/services/api.js
export async function queryScripts(params) {
  return request(`${apiPrefix}/scripts/?${stringify(params)}`, {
    headers: constructHeaders(),
  });
}
去获取数据,返回后,调用上面的queryList
把返回的数据保存到state中去,其中此处就是script的列表:scripts
此时,fetch调用api期间,就开始loading,完成后,loading就消失掉
而同时页面中,也通过render中拿到:this.props.loading,去传递给:
SimpleTable的loading,即Table的loading
才在此处的table中的显示区域中,显示正在加载。
当真正加载完成后,loaidng图标再消失。

转载请注明:在路上 » 【已解决】Antd Pro中始终显示loading加载无法完成消失掉

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
80 queries in 0.200 seconds, using 22.12MB memory