Javascript 从POST API获取数据后呈现功能组件?
我想在从API获取数据后重新呈现组件。我用钩子来处理。但它不起作用。实际上,我的组件是第一次呈现的,而不是在获取数据之后Javascript 从POST API获取数据后呈现功能组件?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我想在从API获取数据后重新呈现组件。我用钩子来处理。但它不起作用。实际上,我的组件是第一次呈现的,而不是在获取数据之后 我有一个外部功能。通过此功能,我可以为该省指定一个省名,然后收到该省城市的列表。我的功能如下: const axios = require('axios'); export default async function getCities(state) { let res = [], err; try { await axios.post('
我有一个外部功能。通过此功能,我可以为该省指定一个省名,然后收到该省城市的列表。我的功能如下:
const axios = require('axios');
export default async function getCities(state) {
let res = [], err;
try {
await axios.post('someUrl', {
ProvinceUser: state,
}).then(function (response) {
if (response.status === 200) {
for (let i = 0; i < response.data.length; i++)
res.push(response.data[i].CityUser);
}
}).catch(function (error) {
err = error;
});
} catch (error) {
err = error;
}
return {
response: res,
error: err
}
}
import React, {useEffect} from "react";
import getCities from "../functions/getCities";
import RadioList from "./RadioList";
export default function ListOfStates(props) {
let labels = [],
cities = [];
useEffect(() => {
getCities(props.cityState).then((array) => {
for (let i = 0; i < array.response.length; i++)
cities.push(array.response[i]);
labels = cities;
});
}, []);
return (<>
{labels.map((labels, index) =>
<RadioList active={(labels === props.active)} key={index} label={labels}/>)}
</>);
}
const axios=require('axios');
导出默认异步函数getCities(状态){
设res=[],err;
试一试{
等待axios.post('someUrl'{
ProvinceUser:state,
}).然后(功能(响应){
如果(response.status==200){
for(设i=0;i
我正在我的组件中使用上述函数,如下所示:
const axios = require('axios');
export default async function getCities(state) {
let res = [], err;
try {
await axios.post('someUrl', {
ProvinceUser: state,
}).then(function (response) {
if (response.status === 200) {
for (let i = 0; i < response.data.length; i++)
res.push(response.data[i].CityUser);
}
}).catch(function (error) {
err = error;
});
} catch (error) {
err = error;
}
return {
response: res,
error: err
}
}
import React, {useEffect} from "react";
import getCities from "../functions/getCities";
import RadioList from "./RadioList";
export default function ListOfStates(props) {
let labels = [],
cities = [];
useEffect(() => {
getCities(props.cityState).then((array) => {
for (let i = 0; i < array.response.length; i++)
cities.push(array.response[i]);
labels = cities;
});
}, []);
return (<>
{labels.map((labels, index) =>
<RadioList active={(labels === props.active)} key={index} label={labels}/>)}
</>);
}
import React,{useffect}来自“React”;
从“./functions/getCities”导入getCities;
从“/RadioList”导入放射科医生;
导出默认函数列表状态(道具){
让标签=[],
城市=[];
useffect(()=>{
getCities(props.cityState)。然后((数组)=>{
for(设i=0;i
)}
);
}
可以说:
useffect
中使用了console.log(标签)
。一切都很好
使用标签
数组。只需更新组件即可useffect
中为DEP使用了labels
数组。但事实并非如此
成功了那么,哪些部分出错了?简单地更新变量的值不会触发渲染,但是如果使用
useState()
hook将标签声明为状态数组,则更新它会触发渲染
注意:使用索引作为键是一种反模式,这只会在以后导致麻烦,请为每个元素选择一个唯一标识符作为键
import React, { useEffect, useState } from "react";
import getCities from "../functions/getCities";
import RadioList from "./RadioList";
export default function ListOfStates(props) {
const [labels, setLabels] = useState([]);
const cities = [];
useEffect(() => {
getCities(props.cityState).then((array) => {
for (let i = 0; i < array.response.length; i++) {
cities.push(array.response[i]);
}
setLabels([...cities]);
});
}, []);
return (
<>
{labels.length && labels.map((labels, index) =>
<RadioList active={(labels === props.active)} key={labels.id} label={labels} />)}
</>
);
}
import React,{useffect,useState}来自“React”;
从“./functions/getCities”导入getCities;
从“/RadioList”导入放射科医生;
导出默认函数列表状态(道具){
const[labels,setLabels]=useState([]);
康斯特城市=[];
useffect(()=>{
getCities(props.cityState)。然后((数组)=>{
for(设i=0;i
)}
);
}
简单地更新变量的值不会触发渲染,但是如果您使用useState()
钩子将标签声明为状态数组,则更新变量的值将不会触发渲染。我使用状态来处理它。但我无法将数据放入状态。对于数组,我们使用array.push(某物)
。那么,你能给出一个答案并告诉我如何使用状态来实现吗?您好,我再次尝试使用redux
而不是纯反应状态。它不起作用。我在这个帖子的另一个答案中发布了我的代码。你能读一下并帮我吗?我想如果你把它作为一个单独的问题贴出来,你会得到更好的回答,而且把一个问题作为答案贴出来也有点离题。