React и Redux теряют состояние

Надеюсь, вы все в порядке. Я новичок, чтобы реагировать на редукционный мир. Я учусь и работаю над проектом регистрации вызовов. У меня есть несколько вопросов, и было бы здорово, если бы кто-нибудь подсказал мне, делаю ли я это неправильно, или подскажет альтернативу.

Я использую JWT для аутентификации пользователя. После проверки данных пользователя. Я отправляю действие успеха, а в редюсере я устанавливаю состояние «аутентифицировано истинно» и отвечаю. Я также сохраняю токен и срок действия в localStorage.

В корневом файле, который является индексным файлом. Я проверяю, существует ли токен в localStorage, и если да, то отправляю вход в действие.

Все работает. Но я теряю другие значения, такие как ответ сервера. Когда он вошел в систему в первый раз. Как я могу справиться с этой проблемой?

Во-вторых, в правом верхнем углу есть начальный значок пользователя. Я получаю инициал, когда пользователь входит в систему, и он сохраняется в состоянии аутентификации. он работает нормально, но еще раз, если я обновляю страницу, она становится нулевой, и я теряю этот начальный код.

поэтому я попробовал другой способ и сохранил исходный файл в localStorage. Но панель навигации уже отображается на экране, и я не вижу инициалов, пока не обновлю страницу.

Я передал новый ключ в mapStateToProps. ii и сохранил в нем исходный файл из localStorage, и он работает нормально. Это правильный способ сделать это???

С уважением Встретить

            const  SignedInLinks  = (props) => {                                                      
            return (
                <ul  className = "right">
                    <li><NavLink  to = "/signin"  onClick=        
                    {props.signOut}>Log Out</NavLink></li>
                    <li><NavLink  className = "btn btn-floating pink lighten-1"  to = "/">
                    {props.ii  ?  props.ii  :  null  }
                    </NavLink></li>
            </ul>
            )}

            const  mapStateToProps  =  state  => {
                return {
                    auth:  state.auth,
                    ii:  window.localStorage.getItem('ui')
                }
            }
            export  default  connect(mapStateToProps, { signOut })(SignedInLinks);

React и Redux теряют состояние

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
585
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вместо того, чтобы использовать localStorage в mapStateToProps, инициализируйте свое состояние ii в своем редюсере, соответствующем этому состоянию, а затем передайте его своему компоненту через mapStateToProps. Что-то вроде этого.

const iiReducer = (state = window.localStorage.getItem('ui') || false, action) => {
  /*.
  .
  . Other Logic
  .
  .*/
  return state
}

а затем используйте его как обычно, как в магазине

const  mapStateToProps  =  state  => {
    return {
        auth: state.auth,
        ii: state.ii
    }
}

Надеюсь это поможет !

Я считаю, что у меня есть представление о том, в чем проблема (я тоже новичок в реагировании и редуксе, так что скажите мне, если я говорю ерунду).

Вы говорите, что храните токен в локальном хранилище (рекомендуется не делать этого, кстати, рекомендуется хранить его в файле cookie), и если в локальном хранилище найден действительный токен, вы входите в систему. Я предполагаю, что вы сохраняете ответ от сервера (включая значок) в состоянии приложения или в хранилище избыточности? Если это так, эта информация будет удалена при обновлении браузера (f5), поэтому больше не загружается.

Решение состоит в том, чтобы убедиться, что соответствующие данные загружаются при монтировании компонента, поэтому в вашем методе componentDidMount (если у вас его нет, создайте его) и установите состояние в этом методе.

Вы не говорите глупости, приятель :) Я не уверен, какой из них является рекомендуемым способом хранения токена. Во многих статьях некоторые говорят, что нужно использовать localStorage, а в других — cookie. Я предпочитаю использовать sessionStorage, но не думаю, что здесь это необходимо. Вт

Meet 12.03.2019 15:15

Я храню ответ в хранилище избыточности. исходное состояние моего редуктора - const initState = { authError: null, authentication: false, data: {}, error: {}, msg: {} }; если успешно, то аутентифицировано: true, если нет, то authError: "вход не выполнен"

Meet 12.03.2019 15:23

Другие вопросы по теме