sanManjiro
@sanManjiro

Как изменить состояние объекта в useState??

У меня есть useState, который в зависимости от булева значение отрендеривает компонент:
const [questionnaireSteps, setQuestionnaireSteps] = useState({
    contactUs: true, // контактная информация - 1-я форма
    phoneNumberVerification: false, // подтверждение номера телефона - код из смс
    passportDetails: false, // паспортные данные - 2-я форма
    employmentAndIncome: false, // занятость и доходы - 3-я форма
  })

Вот сами компоненты:
{ questionnaireSteps.contactUs === true
    ? <StepOneForm
        statusStepOneForm={(value) => {setQuestionnaireSteps({...questionnaireSteps, contactUs: value}); console.log(value)}}
        statusSmsPhone={(value) => setQuestionnaireSteps({...questionnaireSteps, phoneNumberVerification: value})}
        phoneNumber={setPhoneNumber}
    /> : undefined }
{ questionnaireSteps.phoneNumberVerification === true
    ? <ModalDialog
        phoneNumber={phoneNumber}
        statusSmsPhone={(value) => setQuestionnaireSteps({...questionnaireSteps, phoneNumberVerification: value})}
        statusStepOneForm={(value) => setQuestionnaireSteps({...questionnaireSteps, contactUs: value})}
        setStatusStepTwoForm = { (value) => setQuestionnaireSteps({...questionnaireSteps, passportDetails: value}) }
    /> : undefined }
{ questionnaireSteps.passportDetails === true
    ? <StepTwoForm
        statusSmsPhone={(value) => setQuestionnaireSteps({...questionnaireSteps, phoneNumberVerification: value})}
        statusStepTwoForm={(value) => setQuestionnaireSteps({...questionnaireSteps, passportDetails: value})}
        statusStepThreeForm={(value) => setQuestionnaireSteps({...questionnaireSteps, employmentAndIncome: value})}
    /> : undefined }
{ questionnaireSteps.employmentAndIncome === true
    ? <StepThreeForm
        statusStepTwoForm={(value) => setQuestionnaireSteps({...questionnaireSteps, passportDetails: value})}
        statusStepThreeForm={(value) => setQuestionnaireSteps({...questionnaireSteps, employmentAndIncome: value})}
    /> : undefined }

Проблема заключена здесь:
statusStepOneForm={(value) => {setQuestionnaireSteps({...questionnaireSteps, contactUs: value}); console.log(value)}}
В консоль выводит значение false, соответственно в стейте contactUs должен был стать false и скрыться, но если вызывать useEffect, то выводя список объектов можно увидеть что contactUs все равно остается true:
contactUs: true
employmentAndIncome: false
passportDetails: false
phoneNumberVerification: true

Я знаю что такая ошибка связана с перередером компонентов и не знаю как её решить. Заранее спасибо.
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
@historydev Куратор тега JavaScript
Валера, настало твоё время
Во первых:
{ questionnaireSteps.contactUs && (<StepOneForm
        statusStepOneForm={(value) => {setQuestionnaireSteps({...questionnaireSteps, contactUs: value}); console.log(value)}}
        statusSmsPhone={(value) => setQuestionnaireSteps({...questionnaireSteps, phoneNumberVerification: value})}
        phoneNumber={setPhoneNumber}
    />)}

Во вторых:
const myFunc = (type, value) => {
     console.log(value)
     if(type === 'step') setQuestionnaireSteps({...questionnaireSteps, contactUs: value});
     if(type === 'sms') (value) => setQuestionnaireSteps({...questionnaireSteps, phoneNumberVerification: value})
};
{ questionnaireSteps.contactUs && (<StepOneForm
        statusStepOneForm={value => myFunc('step', value)}
        statusSmsPhone={value => myFunc('sms', value)}
        phoneNumber={setPhoneNumber}
    />)}


В третьих что передаётся в это value и откуда?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы