![](/img/trans.png)
[英]React: How to force a function to run after another one is totally completed?
[英]How do I run one function after another one in React?
在我的代码中,我有loadData()
和useFilter()
。 我尝试先运行loadData()
,因为需要为useFilter()
设置productsData
来处理productsData
。 但是,我尝试了.then()
但是当我控制台日志useFilter()
时它仍然给我undefined
我该如何解决这个问题?
const [productsData, setProductsData] = useState(null);
const loadData = async () => {
const { data } = await getAxios().get('/market/list').then(response => response.data)
setProductsData(data)
}
const useFilter = () => {
return productsData.map(data => (...))
//filters productsData
};
useEffect(()=>{
loadData().then(()=>useFilter());
},[])
更改 state异步。 所以在更改后立即使用 state 可能不会更新一个。
在 state 更改后,您可以使用useEffect
调用您的 function。
你可以这样做:
const [productsData, setProductsData] = useState(null);
const useFilter = () => {
return productsData.map(data => (...))
//filters productsData
};
useEffect(()=>{
const loadData = async () => {
const { data } = await getAxios().get('/market/list').then(response => response.data)
setProductsData(data)
}
loadData()
},[])
useEffect(()=>{
useFilter();
},[productsData])
您好,仅通过进行 function 异步不会使其返回 promise 以便使用。然后在 function 调用上,您必须确保他们返回承诺
所以你可以做的一种实现是:
const [productsData, setProductsData] = useState(null);
const loadData = () => {
return getAxios().get('/market/list').then(response => response.data)
}
const useFilter = () => {
return productsData.map(data => (...))
//filters productsData
};
useEffect(()=>{
loadData().then((data)=>{
setProductsData(data);
useFilter();
}
);
},[])
在上述实现中,我返回 axios 返回的 promise 您也可以通过创建 promise 来返回您自己的 promise
如果您遇到任何问题,请告诉我
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.