Синхронизация вложенного массива внутри объекта в хуке useState - PullRequest
0 голосов
/ 28 мая 2020

Я определил объект useState следующим образом:

const [groupDetails, setGroupDetails] = React.useState([
    { fullName: "", phoneNo: "", gender: "" },
  ]);
  const [state, setState] = React.useState({
    fullName: "",
    phoneNo: " ",
    email: "",
    gender: "",
    idProof: "",
    noOfPeople: "",
    bookingId: "",
    detailsOfPeople: groupDetails,
  });

Я завершил заполнение вложенного массива groupDetails , но когда я это сделаю:

console.log("state object:",state);

Поле «detailsOfPeople», содержащее этот массив groupDetails , ничего не показывает. Но если я напечатаю «groupDetails», будут показаны все значения. В функции useEffect я делаю это:

useEffect(() => {
    setGroupDetails(groupDetails);
    setState(state);
  }, [state, groupDetails]);

1 Ответ

2 голосов
/ 28 мая 2020

Перехватчики React State работают асинхронно c, поэтому вам не следует ждать изменения состояния после вызова setState. Вы можете поймать конец изменения состояния с помощью useEffect.

useEffect(() => {
    setGroupDetails(groupDetails);
    setState(prevState => ({...prevState, detailsOfPeople: groupDetails}) );
}, [groupDetails]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...