有什么方法可以调用 api 并在 reactjs 中使用 useState 保存它?
Is there any way to call the api and save it using useState in reactjs?
我在 useEffect 中调用 api 并使用 useState 保存它时遇到一些问题 每次重新加载或访问我的页面时 。
我在 useEffect 中调用 api,而不是在 datas 中使用 useState 设置其数据 variable.and 使用该数据在元素 .
当我第一次实现它时,它工作得非常好,我在我的屏幕上得到了我想显示的数据,但是当我重新加载页面时它在屏幕上抛出一些错误说我的 datas变量未定义。
我正在分享我的代码和我遇到的错误片段。请帮我解决这个错误。
代码:-
import React, { useState, useEffect } from 'react';
import axios from 'axios';
import Casebox from './casebox';
import StatecaseContainer from './statecaseContainer';
function Home(){
const [datas, setDatas] = React.useState({});
React.useEffect(function effectFunction() {
function fetchapi() {
axios.get('https://api.covid19india.org/data.json')
.then((response) => {
setDatas(response.data);
});
}
fetchapi();
}, []);
return (
<div className="container-fluid caseinfocontainer">
<div className="row row-cols-1 row-cols-md-4 justify-content-center">
<Casebox
caseId="totalcases"
caseHeading="Infected"
caseCount={datas.statewise[0].confirmed}
/>
<Casebox
caseId="recovered"
caseHeading="Recovered"
caseCount="2892223"
/>
<Casebox
caseId="deaths"
caseHeading="Deaths"
caseCount="2892223"
/>
<Casebox
caseId="vaccinated"
caseHeading="Vaccinated"
caseCount="2892223"
/>
</div>
<StatecaseContainer />
</div>
)
}
export default Home;
我的错误:-
enter image description here
注意:- 我想在访问或重新加载页面时调用 api。
您的获取方法需要一些时间才能完成,因此有时您的 datas
状态在初始状态下未定义。您可以通过添加条件渲染来检查 datas
状态是否存在来简单地解决这个问题。
通过在 div 前面添加 datas &&
,它将检查数据的状态。如果 datas
未定义,则不会显示 div,否则显示
import React, { useState, useEffect } from 'react';
import axios from 'axios';
import Casebox from './casebox';
import StatecaseContainer from './statecaseContainer';
function Home(){
const [datas, setDatas] = React.useState({});
React.useEffect(function effectFunction() {
function fetchapi() {
axios.get('https://api.covid19india.org/data.json')
.then((response) => {
setDatas(response.data);
});
}
fetchapi();
}, []);
return (
<div className="container-fluid caseinfocontainer">
{{datas && <div className="row row-cols-1 row-cols-md-4 justify-content-center">
<Casebox
caseId="totalcases"
caseHeading="Infected"
caseCount={datas.statewise[0].confirmed}
/>
<Casebox
caseId="recovered"
caseHeading="Recovered"
caseCount="2892223"
/>
<Casebox
caseId="deaths"
caseHeading="Deaths"
caseCount="2892223"
/>
<Casebox
caseId="vaccinated"
caseHeading="Vaccinated"
caseCount="2892223"
/>
</div>}}
<StatecaseContainer />
</div>
)
}
export default Home;
我在 useEffect 中调用 api 并使用 useState 保存它时遇到一些问题 每次重新加载或访问我的页面时 。
我在 useEffect 中调用 api,而不是在 datas 中使用 useState 设置其数据 variable.and 使用该数据在元素
当我第一次实现它时,它工作得非常好,我在我的屏幕上得到了我想显示的数据,但是当我重新加载页面时它在屏幕上抛出一些错误说我的 datas变量未定义。
我正在分享我的代码和我遇到的错误片段。请帮我解决这个错误。
代码:-
import React, { useState, useEffect } from 'react';
import axios from 'axios';
import Casebox from './casebox';
import StatecaseContainer from './statecaseContainer';
function Home(){
const [datas, setDatas] = React.useState({});
React.useEffect(function effectFunction() {
function fetchapi() {
axios.get('https://api.covid19india.org/data.json')
.then((response) => {
setDatas(response.data);
});
}
fetchapi();
}, []);
return (
<div className="container-fluid caseinfocontainer">
<div className="row row-cols-1 row-cols-md-4 justify-content-center">
<Casebox
caseId="totalcases"
caseHeading="Infected"
caseCount={datas.statewise[0].confirmed}
/>
<Casebox
caseId="recovered"
caseHeading="Recovered"
caseCount="2892223"
/>
<Casebox
caseId="deaths"
caseHeading="Deaths"
caseCount="2892223"
/>
<Casebox
caseId="vaccinated"
caseHeading="Vaccinated"
caseCount="2892223"
/>
</div>
<StatecaseContainer />
</div>
)
}
export default Home;
我的错误:- enter image description here
注意:- 我想在访问或重新加载页面时调用 api。
您的获取方法需要一些时间才能完成,因此有时您的 datas
状态在初始状态下未定义。您可以通过添加条件渲染来检查 datas
状态是否存在来简单地解决这个问题。
通过在 div 前面添加 datas &&
,它将检查数据的状态。如果 datas
未定义,则不会显示 div,否则显示
import React, { useState, useEffect } from 'react';
import axios from 'axios';
import Casebox from './casebox';
import StatecaseContainer from './statecaseContainer';
function Home(){
const [datas, setDatas] = React.useState({});
React.useEffect(function effectFunction() {
function fetchapi() {
axios.get('https://api.covid19india.org/data.json')
.then((response) => {
setDatas(response.data);
});
}
fetchapi();
}, []);
return (
<div className="container-fluid caseinfocontainer">
{{datas && <div className="row row-cols-1 row-cols-md-4 justify-content-center">
<Casebox
caseId="totalcases"
caseHeading="Infected"
caseCount={datas.statewise[0].confirmed}
/>
<Casebox
caseId="recovered"
caseHeading="Recovered"
caseCount="2892223"
/>
<Casebox
caseId="deaths"
caseHeading="Deaths"
caseCount="2892223"
/>
<Casebox
caseId="vaccinated"
caseHeading="Vaccinated"
caseCount="2892223"
/>
</div>}}
<StatecaseContainer />
</div>
)
}
export default Home;