Javascript 使用React useState获取数据出错
我的代码有问题,你能帮我解决吗? 我已经创建了一个id状态来从API获取id,因为我需要这个id来进行另一次获取Javascript 使用React useState获取数据出错,javascript,reactjs,api,Javascript,Reactjs,Api,我的代码有问题,你能帮我解决吗? 我已经创建了一个id状态来从API获取id,因为我需要这个id来进行另一次获取 const [id, setId] = useState([]) useEffect(() => { async function fetchData() { await fetch('https://cors-anywhere.herokuapp.com/https://dashboard.meraki.com/api/v0/organizations'
const [id, setId] = useState([])
useEffect(() => {
async function fetchData() {
await fetch('https://cors-anywhere.herokuapp.com/https://dashboard.meraki.com/api/v0/organizations', requestOptions)
.then(response => response.json())
.then(result =>
setId(...id, result)
)
.catch(error => console.log('error', error))
}
fetchData()
}, [])
所以这里我有一个ID数组,我将在下一次获取中使用它
const [data, setData] = useState([])
const [isLoading, setIsLoading] = useState(false)
useEffect(() => {
setIsLoading(true)
id.map(companyId => {
async function fetchData() {
await fetch(`https://cors-anywhere.herokuapp.com/https://dashboard.meraki.com/api/v0/organizations/${companyId.id}/licenses`, requestOptions)
.then(response => response.json())
.then(result =>
setData([...data, { company: companyId.name, results: result}]))
.catch(error => console.log('error', error))
}
setIsLoading(false)
fetchData()
})
}, [id])
这里的问题是。。。我为每个id获取一个新的“数据”,因此它会更改每次获取,我知道这是因为我在useState结束时使用了[id],但我需要为每个id获取一个新的“数据”,这怎么可能
当我尝试在useState末尾使用空数组渲染它时,它只返回一个空数组,因为它只渲染一次。如何为第一次获取时在“ID”数组中获得的每个ID获取一个包含第二次获取的所有结果的数据
PS:requestOptions由于API键而被隐藏。…如果要在以前的状态中添加一个元素,可以将一个函数传递给
setData()
,该函数允许您更新旧状态,而不是替换它。
在您的示例中,我将通过返回包含旧状态和新元素的新数组来更改setData
调用。使用spread运算符而不是.push()方法很重要,这样状态就不会直接发生变化。
setData(prevState=>[…prevState,{company:companyId.name,results:result}])
这两个钩子是如何连接的?你能提供更多的上下文吗?第一个useEffect是一个API请求,获取一个数组,该数组给我每个公司的ID,因为第二次获取“/${companyId.ID}/licenses”时我需要这个ID。假设两个钩子在同一个脚本(App.js)上,在第一个钩子上得到这个“[id]”之后,我需要将它用于第二个钩子,以获得每个id(公司)的所有数据。我遇到的问题是,每次我在第二个钩子上“setData()”时,它只会删除我获取的过去的数据,并给我一个新的数据(因为我在useEffect末尾使用[id]。我想存储每个id的所有数据。