javascript - 如何在 React Hooks 中将两个状态合并为单个状态?
问题描述
我想合并两个名为 Data 和 District 值的状态并创建一个名为 test 的单个状态。因为我从不同的 API 获取两个状态值。我无法使单个状态合并以下状态的数据,我尝试了但是当我尝试合并两个状态值我得到一个状态值但无法获得下一个状态值,因为我尝试使用扩展运算符但仍然无法解决问题。以下是我的代码:请帮助解决:
import React, { useState, useEffect } from 'react';
import Axios from 'axios';
export default function Testmap() {
const [Data, setData] = useState([]);//fetched data
const [isLoading, setIsloading] = useState(true);
const [District, setDistrict] = useState([]);
const [test, setTest] = useState({
data: [],
districts: []
});
useEffect(() => {
//fetching data from api
Axios.get('https://covid19wst.yilab.org.np/api/v1/form')
.then(res => {
setData(res.data)
setTest({ ...test, data: res.data })
setIsloading(false)
})
.catch(err => {
console.log(err);
})
Axios.get('https://bipad.gov.np/api/v1/district/')
.then(res => {
setDistrict(res.data.results)
setTest({ ...test, districts: res.data.results })
setIsloading(false)
})
.catch(err => {
console.log(err);
})
}, [])
console.log(isLoading);
console.log("data", Data);
console.log("districts>>", District);
console.log("test>>>", test);
return (
<div>
<h2>Hello</h2>
</div>
)
}
在上面的输出中,我尝试在单个状态测试中保留数据和区域的两个状态值,但是当代码运行时,当我使用扩展运算符保留以前的值时,我无法使用以前的值获取更新值。仍然没有保留以前的值,我该如何解决这个问题?请帮忙。
解决方案
Promise.all()是处理多个互不依赖的请求的更好选择。
考虑仅在两个请求都完成时loading
设置为。false
此外,状态可以这样简化:
export default function Testmap() {
const [isLoading, setIsloading] = useState(false);
const [test, setTest] = useState({
data: [],
districts: [],
});
useEffect(() => {
setIsloading(true);
Promise.all([
Axios.get("https://covid19wst.yilab.org.np/api/v1/form"),
Axios.get("https://bipad.gov.np/api/v1/district/"),
])
.then((results) => {
setIsloading(false);
setTest({
data: results[0].data,
districts: results[1].data.results
});
})
.catch((err) => {
setIsloading(false);
console.log(err);
});
}, []);
return (
<div>
<h2>Hello</h2>
</div>
);
}
推荐阅读
- python - Skopt.gp_minimize:将参数传递给目标函数
- powershell - PowerShell Loop Ping 在线状态
- python - 无法在不重定向的情况下创建付款发票
- c# - 在没有 WPF Scrollviewer 的情况下同步滚动两个 WPF(!) Richtextboxes
- performance - 无法使用 pypy 运行 python 文件
- python - 根据特定顺序从文件中读取文件
- wordpress - Facebook for WooCommerce 插件
- dataset - 有人可以帮我找到满足以下要求的数据集吗?
- flutter - 如何添加如图所示的弯曲模态底片?如何在其上方添加关闭按钮?飘飘然
- r - 使用 case_when() 和 filter() 根据 R 中一列中的值和另一列中的级别对数据帧进行子集化