【发布时间】:2021-06-23 02:10:22
【问题描述】:
我有一个自定义钩子useServerStatus,它使用 axios 从 RESTful API 中获取。检查网络选项卡,响应很好,我可以看到我的所有数据。使用console.log 打印结果或使用debugger 在浏览器中检查结果完美无缺。但是,调用我从useState 获得的 setState 方法不会保存响应数据。
ServerStatus 接口 (ServerStatus.ts)
interface ServerStatus {
taskid: string
taskmodule: string
taskident?: string
status: string
server: string
customer: string
}
useServerStatus 挂钩 (useServerStatus.ts)
export default function useServerStatus() {
const [serverStatus, setServerStatus] = useState<ServerStatus[][]>([]);
useEffect(() => {
fetchServerStatus();
}, []);
const fetchServerStatus = () => {
axios.get<ServerStatus[][]>(`${config.apiURL}/servers`)
.then(res => setServerStatus(res.data));
}
return serverStatus;
}
网络标签
https://i.imgur.com/cWBSPVz.png
您在网络选项卡中看到的第一个请求的处理方式完全相同,没有问题。
React 开发者控制台
【问题讨论】:
-
尝试将您的数据获取代码移动到 useEffect 挂钩中?这是从文档中获取异步数据的建议方式
-
@konekoya 我刚试过,结果和以前一样
-
首先你在useEffect中没有依赖数组,我认为它的作用是发送未定义的。如果您只想在第一次渲染时获取服务器状态,请尝试插入一个空数组作为依赖项。
-
@MartinZ 我确实有这个,我在复制和格式化代码时一定错过了它。我会编辑它
-
@NilsFahle 好的,很好。我假设如果你 console.log res.data 你从网络标签得到相同的结果?
标签: reactjs typescript axios react-hooks