【发布时间】:2019-02-22 19:29:14
【问题描述】:
我在这里找不到类似的问题,所以这里是:
我创建了一个自定义钩子useBudget 来获取一些数据。
const initalState = {
budget_amount: 0,
};
const useBudget = (resource: string, type: string) => {
const [budgetInfo, setBudget] = useState(initalState);
useEffect(
() => {
(async (resource, type) => {
const response = await fetchBudgetInfo(resource, type);
setBudget(response);
})(resource, type);
}, []);
return [budgetInfo];
};
在使用该钩子的组件上,我有这样的东西:
const [budgetInfo] = useBudget(resource, type);
const [budgetForm, setBudgetForm] = useState({ warningMsg: null, errorMsg: null, budget: budgetInfo.budget_amount });
问题是:这个组件的初始状态在抓取后没有更新。 budget 最初以 0 呈现并保持这种方式。如果console.log(budgetInfo) 紧随其后,budget 会更新,但状态不会。
我相信这是由于异步性而发生的,对吧?但是如何解决这个问题?
谢谢!
【问题讨论】:
-
你可以在例如创建一个Minimal, Complete, and Verifiable example吗? CodeSandbox?很难说当前问题中的代码有什么问题。
-
我稍后会尝试这样做并将其发布在这里,但没有更多内容。我只是想根据获取数据的自定义钩子的返回来获得一个本地状态。
-
钩子没问题。它不起作用意味着它使用不正确。没有证据表明 fetchBudgetInfo 返回正确的对象。
-
@estus,它确实返回了正确的对象。
budget更新后的值不同于0(初始值) -
是
budget_amount而不是budget,不是吗?
标签: reactjs react-hooks