Reactjs 在效果挂钩内设置挂钩状态
我正在尝试为我的一门课程的React作业创建一个自定义数据获取挂钩。这是一个简单的钩子,它访问两个RESTAPI端点,并创建一个清单对象,应用程序将其用于sallad组件。问题是,我似乎无法从获取数据的Reactjs 在效果挂钩内设置挂钩状态,reactjs,react-hooks,react-state,Reactjs,React Hooks,React State,我正在尝试为我的一门课程的React作业创建一个自定义数据获取挂钩。这是一个简单的钩子,它访问两个RESTAPI端点,并创建一个清单对象,应用程序将其用于sallad组件。问题是,我似乎无法从获取数据的useffect钩子中设置钩子的内部状态。我以前曾多次使用过这种方法,但我确实不知道是什么导致了这种行为。无论我在useffect函数中尝试使用setContent时,它总是保持null 请帮忙 const useInventory=(baseURL)=>{ const[loading,setLo
useffect
钩子中设置钩子的内部状态。我以前曾多次使用过这种方法,但我确实不知道是什么导致了这种行为。无论我在useffect
函数中尝试使用setContent
时,它总是保持null
请帮忙
const useInventory=(baseURL)=>{
const[loading,setLoading]=useState(false);
const[content,setContent]=useState(null);
const[error,setError]=useState(null);
useffect(()=>{
设置加载(真);
常量类型=[‘基础’、‘额外’、‘蛋白质’、‘敷料’];
constURL=types.map(endp=>`${baseURL}/${endp}`);
允诺
.all(url.map(u=>fetch(u)))
.then(responses=>Promise.all(responses.map(res=>res.json()))
。然后(数据=>{
常量库存=数据减少((acc、curr、i)=>
({…acc,[types[i]]:curr}),
{});
//这将以所需格式记录库存
//例如{foundations:Array,extras:Array,…}
控制台日志(库存);
内容(清单);
})
.catch(错误=>{
设置错误(err);
})
.最后(()=>{
设置加载(假);
//出于某种原因,此日志为空
控制台日志(内容);
});
},[baseURL]);
返回[内容、加载、错误];
}
设置状态不同步您将无法在最终块中获得更新的内容
若要调试内容更改的值,可以使用useffect和控制台,如下所示
useEffect(() => {
console.log(content);
}, [content])
试试这个,它会通过的
const useInventory=baseURL=>{
const[loading,setLoading]=useState(false);
const[content,setContent]=useState(null);
const[error,setError]=useState(null);
useffect(()=>{
设置加载(真);
常量类型=[“基础”、“额外”、“蛋白质”、“敷料”];
constURL=types.map(endp=>`${baseURL}/${endp}`);
函数getData(){
Promise.all(url.map(u=>fetch(u)))
.then(responses=>Promise.all(responses.map(res=>res.json()))
。然后(数据=>{
const inventory=data.reduce(
(acc,curr,i)=>({…acc,[types[i]]:curr}),
{}
);
//这将以所需格式记录库存
//例如{foundations:Array,extras:Array,…}
控制台日志(库存);
内容(清单);
})
.catch(错误=>{
设置错误(err);
});
}
getData();
},[baseURL,内容];
控制台日志(内容);
返回[内容、加载、错误];
};
`
我认为您不需要设置内容(null)
,也可以尝试制作一个沙盒(codesandbox.io)。但正如我刚才证实的,这并不能解决我的问题。为了避免混淆,我将把它从帖子中删除。我正在本地运行API,但我会尝试使用沙盒升级,这是一个很好的观点,非常感谢!这会记录内容的更改值,现在我注意到在使用该值的父组件中犯了一些明显的错误。