【发布时间】:2019-12-23 08:34:42
【问题描述】:
我正在尝试在单击按钮时从反应组件内的 api 加载更多数据。此数据应与已加载的数据合并。加载时我想显示一个微调器。我正在使用 axios 和 react 钩子组件。
我的代码:
const App = props => {
const [data, setData] = useState({ ... });
// ...
function handleLoadMore(uri) {
setData({...data, isLoadingMore: true})
axios
.get(uri)
.then(response => {
setData({
...data,
items: [...data.items, response.data.items]
})
})
.catch(error => {
setData({
...data,
error: 'An error occured'
})
})
.finally(() => {
setData({
...data,
isLoadingMore: false
})
})
}
我希望这首先显示微调器,加载新数据,将其与预先存在的数据合并并显示新的项目列表,但新数据不会合并。 ajax调用返回正确的结果,所以没有问题。令我意想不到的是,如果我删除 .finally(..) 一切都按预期工作,即使微调器也会消失。
那么问题来了,setData 如何更新 Promise 中的状态?在我看来,省略.finally(..) 一点也不明确,因为isLoadingMore 在代码中从未设置为false,但无论如何它都会以某种方式更新为false
【问题讨论】:
-
该代码不会做任何事情,它缺少第二个
setData调用中的结束]。请不要重新输入代码;使用复制和粘贴。 -
我修好了。除了那个错误,我认为它应该做什么很清楚
标签: javascript reactjs promise setstate