reactjs - 如何存储来自 Axios 响应的数据?
问题描述
我正在尝试存储 axios 响应,但方法 1 似乎是唯一有效的方法。
方法1:从状态可以正常工作
const [loadingData, setLoadingData] = useState(true);
const [data, setData] = useState([]);
useEffect(() => {
async function getData() {
await axios
.get("sampleApi")
.then((response) => {
setData(response.data);
setLoadingData(false);
});
}
if (loadingData) {
getData();
}
}, []);
...
// This works fine from state
{data.map(
(i, index) => {
return <p key={index}>{i.id}</p>
}
)}
方法 2:尝试设置为常规变量而不是状态
const [loadingData, setLoadingData] = useState(true);
let data;
useEffect(() => {
async function getData() {
await axios
.get("sampleApi")
.then((response) => {
data = response.data // <====== This
setLoadingData(false);
});
}
if (loadingData) {
getData();
}
}, []);
...
// Following results in: Uncaught TypeError: Cannot read properties of undefined (reading 'map')
{data.map(
(i, index) => {
return <p key={index}>{i.id}</p>
}
)}
所以,两个问题:
- 将数据存储在状态中是“坏习惯”吗(因为我只打算阅读它而不是修改它)
- 知道我在方法2中做错了什么吗?
解决方案
将数据存储在状态中是“坏习惯”吗
不,这就是国家的目的。
(因为我只打算阅读而不是修改它)
您正在修改它:您正在将其从默认值更改为 HTTP 请求中的值。
知道我在方法2中做错了什么吗?
这是一个常见问题解答
推荐阅读
- php - 如何在 laravel 中使用忽略来验证名称
- xcode - 即使安装了“Xcode Version 11.2.1 (11B500)”,Xcode 仍然会导致使用 UITextView 的应用程序崩溃
- docker - 保存凭据时出错:存储凭据时出错 - 错误:没有凭据服务器 URL,输出:登录 docker 时“没有凭据服务器 URL”
- php - 如何用php替换大量重复字母中的字母?
- ssl - Digital Ocean CyberPanel(在 Ubuntu 18.04 上):ACME 证书被阻止禁止 - 283 无法为域获取 SSL。[问题SSLForDomain]
- powershell - 如何更改 PowerShell 提示颜色?
- javascript - 如何键入返回对象的常量函数?
- batch-file - 如何从服务获取响应消息并使用批处理文件打印该消息?
- c++ - 运算符重载 - [错误] ld 返回 1 个退出状态
- javascript - D3 v5 - 如何设置文本的背景颜色(仅与文本一样宽)