【发布时间】:2019-08-21 23:04:35
【问题描述】:
当我的组件使用componentDidMount 加载时,我正在尝试加载数据。但是调用 Redux 操作,使用 axios 进行调用似乎会冻结 UI。当我有一个包含 12 个输入的表单并且一个进行 API 调用时,我会假设我可以输入其他输入并且不会让它们冻结在我身上。
我已尝试阅读有关该主题的其他一些帖子,但它们都有些不同,而且我尝试的所有方法似乎都无法解决问题。
我正在使用 React 16.8 开发 linux(使用 RN 时我使用 55.4)
我已经尝试让我的 componentDidMount 异步以及 redux-thunk 操作。它似乎没有任何帮助,所以我一定是做错了什么。
我尝试执行以下操作但没有成功。只是对我尝试的内容使用简短的形式。下面列出了实际代码。
async componentDidMount() {
await getTasks().then();
}
我试过了
export const getTasks = () => (async (dispatch, getState) => {
return await axios.get(`${URL}`, AJAX_CONFIG).then();
}
当前代码:
组件.js
componentDidMount() {
const { userIntegrationSettings, getTasks } = this.props;
// Sync our list of external API tasks
if (!isEmpty(userIntegrationSettings)) {
getTasks(userIntegrationSettings.token)
// After we fetch our data from the API create a mapping we can use
.then((tasks) => {
Object.entries(tasks).forEach(([key, value]) => {
Object.assign(taskIdMapping, { [value.taskIdHuman]: key });
});
});
}
}
Action.js
export const getTasks = () => ((dispatch, getState) => {
const state = getState();
const { token } = state.integrations;
const URL = `${BASE_URL}/issues?fields=id,idReadable,summary,description`;
const AJAX_CONFIG = getAjaxHeaders(token);
dispatch(setIsFetchingTasks(true));
return axios.get(`${URL}`, AJAX_CONFIG)
.then((response) => {
if (!isEmpty(response.data)) {
response.data.forEach((task) => {
dispatch(addTask(task));
});
return response.data;
} else {
dispatch(setIsFetchingTasks(false));
}
})
.catch((error) => {
dispatch(setIsFetchingTasks(false));
errorConsoleDump(error);
errorHandler(error);
});
});
reducer.js
export default (state = defaultState, action) => {
switch (action.type) {
case ADD_TASK:
case UPDATE_TASK:
return update(state, {
byTaskId: { $merge: action.task },
isFetching: { $set: false }
});
default:
return state;
}
};
【问题讨论】:
-
回调、承诺或异步/等待或多或少是一回事...处理异步请求...这将需要一些时间...您需要做的是保持跟踪是“加载状态”,而加载是真实的显示/渲染一个微调器,让用户知道发生了什么,而 UI 只是冻结...
-
也许这就是我当时编写组件的方式。我的整个十二个输入形式被锁定似乎很奇怪,因为一个选择器需要拨打电话。我希望他们至少可以在等待的时候在其他输入中输入信息
-
看看这篇文章...我想它应该会有所帮助...stackoverflow.com/questions/55204422/…
-
@P-RickStephens 你的问题解决了吗?
标签: reactjs react-native redux redux-thunk