如何在 React 中不丢失数组的值?
How not to lose the values of an array in React?
我需要在 React 上挂载动态 'select',但我遇到了问题。
我正在执行 'for' 来调用 API,但是在执行 'for' 时,我丢失了之前的值。
如何维护这些值?
我尝试这样做,但它产生了一个无限循环:
const Form = (props) => {
const [makes, setMakes] = useState([]);
const [models, setModels] = useState([]);
useEffect(() => {
api.get("Make").then((response) => {
setMakes([...response.data]);
});
}, []);
async function handleModels() {
for (let i = 0; i < makes.length; i++) {
const response = await api.get(`Model?MakeID=${makes[i]["ID"]}`);
const model = response.data;
setModels([...models, model]);
}
}
if (makes.length) {
handleModels();
}
谢谢!
您需要传递一个接受当前状态的函数:
setModels((models)=> [...models, model]);
或者更好的是,将结果推送到一个数组,然后只更新一次状态:
async function handleModels() {
let allModels = []
for (let i = 0; i < makes.length; i++) {
const response = await api.get(`Model?MakeID=${makes[i]["ID"]}`);
const model = response.data;
allModels.push(model);
}
setModels(allModels);
}
查看工作示例:
https://codesandbox.io/s/happy-sunset-nv3oc?file=/src/App.js
我需要在 React 上挂载动态 'select',但我遇到了问题。
我正在执行 'for' 来调用 API,但是在执行 'for' 时,我丢失了之前的值。
如何维护这些值?
我尝试这样做,但它产生了一个无限循环:
const Form = (props) => {
const [makes, setMakes] = useState([]);
const [models, setModels] = useState([]);
useEffect(() => {
api.get("Make").then((response) => {
setMakes([...response.data]);
});
}, []);
async function handleModels() {
for (let i = 0; i < makes.length; i++) {
const response = await api.get(`Model?MakeID=${makes[i]["ID"]}`);
const model = response.data;
setModels([...models, model]);
}
}
if (makes.length) {
handleModels();
}
谢谢!
您需要传递一个接受当前状态的函数:
setModels((models)=> [...models, model]);
或者更好的是,将结果推送到一个数组,然后只更新一次状态:
async function handleModels() {
let allModels = []
for (let i = 0; i < makes.length; i++) {
const response = await api.get(`Model?MakeID=${makes[i]["ID"]}`);
const model = response.data;
allModels.push(model);
}
setModels(allModels);
}
查看工作示例: https://codesandbox.io/s/happy-sunset-nv3oc?file=/src/App.js