Как не потерять значения массива в React? - PullRequest
0 голосов
/ 13 июля 2020

Мне нужно смонтировать динамический c 'select' в реакции, но у меня проблема.

Я делаю 'for' для вызова API, но как 'for' выполняется, я теряю предыдущие значения.

Как мне сохранить эти значения?

Я пытался это сделать, но сгенерировал бесконечное l oop:

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();
  }

Спасибо!

1 Ответ

1 голос
/ 13 июля 2020

Вам нужно передать функцию, которая принимает текущее состояние:

setModels((models)=> [...models, model]);

Или, что еще лучше, pu sh приводит к массиву, а затем обновляет состояние только один раз:

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

...