Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在效果挂钩内设置挂钩状态_Reactjs_React Hooks_React State - Fatal编程技术网

Reactjs 在效果挂钩内设置挂钩状态

Reactjs 在效果挂钩内设置挂钩状态,reactjs,react-hooks,react-state,Reactjs,React Hooks,React State,我正在尝试为我的一门课程的React作业创建一个自定义数据获取挂钩。这是一个简单的钩子,它访问两个RESTAPI端点,并创建一个清单对象,应用程序将其用于sallad组件。问题是,我似乎无法从获取数据的useffect钩子中设置钩子的内部状态。我以前曾多次使用过这种方法,但我确实不知道是什么导致了这种行为。无论我在useffect函数中尝试使用setContent时,它总是保持null 请帮忙 const useInventory=(baseURL)=>{ const[loading,setLo

我正在尝试为我的一门课程的React作业创建一个自定义数据获取挂钩。这是一个简单的钩子,它访问两个RESTAPI端点,并创建一个清单对象,应用程序将其用于sallad组件。问题是,我似乎无法从获取数据的
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,但我会尝试使用沙盒升级,这是一个很好的观点,非常感谢!这会记录内容的更改值,现在我注意到在使用该值的父组件中犯了一些明显的错误。