Задать вопрос
@bimsalrobit

Каким способом лучше реализовать redirect на главную страницу после регистрации пользователя?

Нужно реализовать авторизацию в приложении.

Что нужно сделать:
1)Установить локальный сервер рядом с папкой проекта и запустить его
2)Сделать страницу регистрации пользователя. Когда пользователь успешно пройдет валидацию формы и нажмет кнопку сабмит отправится запрос на локальный сервер который вернет ответ с токеном, который я сохраню в localstorage
3)Если валидация была успешная сделать редирект на страницу Home
4)Cделать страницу логинизации которая делает аналогичный редирект
5)Cделать кнопку Logout которая будет делать редирект на страницу логинизации

Первые два пункта я сделал, вот часть файла SignupForm.js:

const SignupForm = () => {
 
    const {handleSubmit, values, handleChange, errors, handleBlur, isSubmitting, setSubmitting} = useFormik({  
      initialValues: {
         /.......
      },
        validateOnBlur: false, 
        validateOnchange: false,
        validationSchema: yup.object().shape({    
          /.......
      }),   
      onSubmit: async (formValues) => {
          console.log('submit', formValues);
          setSubmitting(true);
          try {
              const res = await api('api/auth/register', {
                  method:'POST',
                  body: JSON.stringify(formValues)
              });
              const token = res.token.token;
              localStorage.setItem('myToken', token);
              console.log('Result!',token);
          } catch(e) {
              console.error(e);   
          } finally {
              setSubmitting(false);
          }   
      },  
    });
    
   return (
   <form className="fform" onSubmit={handleSubmit}>   
       /........
       <button type="submit" disabled={isSubmitting}>Submit Form</button>       
   </form>
   );
};

Думал как реализовать редирект на страницу Home.js после успешной валидации
И придумал такую идею:
1)создать компоненту SignupForm свое состояние с помощью хука useState и создать в нем свойство registration:" " - тоесть с пустой строкой будет false
2)Прописать в onSubmit сменить состояние на registration: token - тоесть при отправке submit я в state ложу мою переменную token что хранит токент который вернул сервер, и свойство уже true
3) Прописать условие if cвойство registration true тогда Redirect to="/home" else Redirect to="/registration"
4) А для кнопки logout создать функцию которая будет удалять из localstorage токен и соответственно свойство registration будет false

Но проблема в том что я не знаю как реализовать это на практике потому-что перемення token доступна только в методе onSubmit в блоке try и соотвественно я не смогу ее положить в состояние. Подскажите пожалуйста как реализовать это на практике? Или лучше каким-то другим способом реализовать? Если да то подскажите как?
P.S. Нужно обязательно использовать Formik

Вот сандбокс моего проекта:
https://codesandbox.io/s/flamboyant-neumann-hwj1t

В папке public/data я создал файл data.json где написал ответ который дает мне мой локальный сервер после отправки формы.
  • Вопрос задан
  • 147 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Merion Academy
    Frontend-разработка на React
    4 месяца
    Далее
  • ProductStar
    React: отточите навыки интерфейсной разработки
    6 недель
    Далее
Решения вопроса 1
Wondermarin
@Wondermarin
const [myToken, setMyToken] = useState(
  localStorage.getItem("myToken")
);

Очень грубо, но это один из вариантов...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽