reactjs - 无法将 response.data 放入我的 React.js 状态?(express.js)
问题描述
export default function Main({ match }) {
const userid = match.params.id;
const [user, setUser] = useState([]);
async function fetchuser() {
const response = await api.get('/emps/profile', {
headers: {
userid: match.params.id,
},
});
setUser(response.data);
console.log(response.data);
console.log(user);
}
useEffect(() => {
fetchuser();
}, [match.params.id]);
在上面的代码中,response.data 被写入控制台,但用户状态为空。有人能告诉我这是为什么吗?
解决方案
两个建议:
response
在记录之前确定是否包含任何数据。- 将您的
fetchData
功能移动到useEffect
钩子中。https://stackoverflow.com/a/56851963/8943092
下面是一个如何测试数据是否存在的示例,这里是一个实时沙盒。
请注意,我们使用一个简单的条件来检查if (myData)
是否真实。我们的 useState 钩子没有设置默认值,所以true
一旦数据存在,条件就会返回。
在 render 方法中,我们使用三元组来检查数据是否存在。
您的解决方案可能略有不同,因为您将默认值设置user
为空数组[]
。假设您的 API 调用返回一个数组,您将使用if (user.length > 0)
.
import React, { useEffect, useState } from "react";
export default function App() {
const [myData, setMyData] = useState();
useEffect(() => {
function fetchData() {
setTimeout(function () {
setMyData("I am user data");
}, 3000);
}
if (myData) {
console.log(myData);
} else {
console.log("No data yet");
}
fetchData();
}, [myData]);
return (
<div className="App">{myData ? <p>{myData}</p> : <p>No data yet</p>}</div>
);
}
推荐阅读
- docker - 将流量重定向到 Kubernetes 服务中的 Tomcat 上下文路径
- java - 如何禁用 JPA 加入继承实体的删除级联?
- html - 我在 JSX 应用程序中遇到重叠元素的问题
- c# - 通用方法与演员
- sql - 将一条活动记录与其他类似记录进行比较的代码
- javascript - 如何使用来自 api url 的 json 填充颜色图?
- ssh - 为什么首选密码、macs 和压缩在关键协商时被写入两次?
- python - 使用 xlwings 将数据框打印到特定的列/行位置,例如 (1,2)
- react-native - react-native 使整个屏幕变黑
- zos - IBM Z/os Rexx 脚本返回 255 退出代码