【发布时间】:2021-08-25 06:50:52
【问题描述】:
对不起,我的英语水平太差了。
假设我想从服务器获取数据并在页面加载时呈现它......逻辑是这样的:
- 页面正在加载并显示 Preloader(此时我发送 get 请求)。
- 数据被提取并发送到 State。
- 预加载器消失,状态数据呈现在页面上。
我的初始状态是这样的:
const state = {
data: [],
isLoading: false
}
我正在做以下事情(代码是关于逻辑的):
function fetchData() {
try {
fetch(URL)
dispatch({...state, isLoading: true})
setTimeout(() => {
dispatch({...state, data: data.payload, isLoading: false})
}, 500);
} catch (err) {
dispatch({...state, isLoading: false})
}
}
这是正确的逻辑吗?我不确定这是否是最佳做法....也许我应该这样做:
function fetchData() {
try {
fetch(URL)
dispatch({...state, isLoading: true})
setTimeout(() => {
dispatch({...state, data: data.payload})
}, 500);
} catch (err) {
dispatch({...state, isLoading: false})
} finnaly {
dispatch({...state, isLoading: false})
}
}
那么改变 isLoading 状态的最佳方法是什么?
我正在考虑的第三个选项是创建一个单独的状态 isLoading...我的意思是我必须声明:
const state = {
data: [],
}
const isLoadingState = {
isLoading: false,
}
【问题讨论】:
-
我不明白为什么会有
setTimeout参与。 -
这是一个基于意见的问题。在第二种方法中,您不需要在 catch 块中将 loading 设置为 false,因为即使出现错误也会调用 finally。
-
@DaveNewton 我认为他正在尝试复制异步操作
-
@DaveNewton 没有 setTimeout 预加载器的出现和消失太快了......它有点闪烁
标签: javascript reactjs