obabichev / react-token-auth

84 stars 22 forks source link

fix The 'listener' function makes the dependencies of useEffect Hook … #6

Closed UseMuse closed 4 years ago

UseMuse commented 4 years ago

…change on every render.

obabichev commented 4 years ago

Там есть доставание из localStorage на инициализации:

const localStorageData = localStorage.getItem(localStorageKey);

А в дальнейшем предполагается, что сохраняться токен будет уже через методы самого токен провайдера, по сути через методы-обертки login и logout, которые внутри импользуют setToken:

const setToken = (token: T | null) => {
        if (token) {
            localStorage.setItem(localStorageKey, JSON.stringify(token));
        } else {
            localStorage.removeItem(localStorageKey);
        }
        privateToken = token;
        notify();
    };

Который уже обновляет внутрениий токен, поэтому его не нужно передоставать каждый раз из стора.

Если править localStorage напрямую, то эта библиотечка об этом ничего конечно не узнает

UseMuse commented 4 years ago

это все я и так понял из кода, почему бы не брать данные о privateToken из LocalStorage каждый раз? Просмотрев код, я увидел всего лишь 2 места где нужно актуализировать privateToken

UseMuse commented 4 years ago

Если править localStorage напрямую, то эта библиотечка об этом ничего конечно не узнает

если добавить мой PR, то библиотечка узнает ;)

obabichev commented 4 years ago

В целом никакой религиозной причины не брать токен из стора нет, максимум - чтобы меньше спамить в стор, но я думаю, что он должен пережить)

Хотя опять же, если каждая подписанная компонента будет для проверки залогиненности по факту ломиться в стор, то возможно это уже будет не очень хорошо.

Я поправлю код, чтобы токен брался всегда из localStorage

obabichev commented 4 years ago

Я обновил код,

Теперь можно передать любой стор вместо моего с кешем в памяти,

Для твоего случая можно сделать следующее:

createAuthProvider({
  storage = localStorage
})

Тогда данные будут писаться и браться всегда напрямую из localStorage

Надеюсь я нигде не накосячил =)

obabichev commented 4 years ago

Также добавил useCallback для подписчиков Исправлено в версии 1.1.7