Size: a a a

2020 September 20

ZS

Znacovean Simion in ☄️ effector
хотелось бы чтоб нечто такое работало
export const getCurrentUser getCurrentUser = guard({
 source:
$auth$auth, // store
 filter: (authData) => authData.isAuthorized,
 target:
getCurrentUserFxgetCurrentUserFx,
});
источник

YL

Yan👀 Lobaty in ☄️ effector
Znacovean Simion
хотелось бы чтоб нечто такое работало
export const getCurrentUser getCurrentUser = guard({
 source:
$auth$auth, // store
 filter: (authData) => authData.isAuthorized,
 target:
getCurrentUserFxgetCurrentUserFx,
});
логика у этого какая-то странная)
источник

YL

Yan👀 Lobaty in ☄️ effector
при каждом апдейте стора аус отправлять фетч пользователя?
источник

YL

Yan👀 Lobaty in ☄️ effector
я правильно понял задумку?
источник

YL

Yan👀 Lobaty in ☄️ effector
Timofey Goncharov
есть следующие юниты:  
getCurrentUserFx // получить текущего юзера
$auth  // стора в которой лежит access token

getCurrentUserFx вызывается в useEffect.
но нужно сделать так, что бы getCurrentUserFx не срабатывал, если в $auth нет access токена.
какое решение будет наиболее правильным?

подумываю использовании guard. но в таком случае нужна зависимость от 2-х source как я понимаю. от $auth и тригера.
а так ответ есть в вопросе)
источник

YL

Yan👀 Lobaty in ☄️ effector
просто вместо useEffect используешь Gate
источник

YL

Yan👀 Lobaty in ☄️ effector
guard({
source: Gate.open,
filter: $isAuthrorized,
target: getUserFx
})
источник

YL

Yan👀 Lobaty in ☄️ effector
если совсем не хочется гейт то ифы в юз эффекте не запрещены
источник

YL

Yan👀 Lobaty in ☄️ effector
юз стором достаешь предварительно стор и проверяешь в юз эффекте его знаешь и запускаешь императивно эффект
но мне такое меньше нравится
источник

YL

Yan👀 Lobaty in ☄️ effector
Znacovean Simion
хотелось бы чтоб нечто такое работало
export const getCurrentUser getCurrentUser = guard({
 source:
$auth$auth, // store
 filter: (authData) => authData.isAuthorized,
 target:
getCurrentUserFxgetCurrentUserFx,
});
если есть возможность isAuthrorized лучше делать мапнутым стором а не полем оригинального)
источник

ZS

Znacovean Simion in ☄️ effector
Yan👀 Lobaty
я правильно понял задумку?
по другому объясню

есть стор auth который хранит токен юзера
который обновляется при авторизации / логауте

есть стор currentUser который хранит данные текущего юзера
роль и прочее

при загрузке страницы стор auth получает изначальные значения из localStorage (в клиент-сайд)
задача сейчас как правильно при этом "вести" стор currentUser
при первой загрузке страницы auth не обновляется если он берется из локалсторадже
в точке входа мы запускаем в юзэффекте эффект который запросит по апишке данные currentUser
так вот этот эффект нужно дергать только если токен есть
хочется сделать это лучшим из способов
юзать стору и ифом в юзэффекте не хочется (боюсь это создаст проблемы)
по-эффектор-way хочется
источник

YL

Yan👀 Lobaty in ☄️ effector
Znacovean Simion
по другому объясню

есть стор auth который хранит токен юзера
который обновляется при авторизации / логауте

есть стор currentUser который хранит данные текущего юзера
роль и прочее

при загрузке страницы стор auth получает изначальные значения из localStorage (в клиент-сайд)
задача сейчас как правильно при этом "вести" стор currentUser
при первой загрузке страницы auth не обновляется если он берется из локалсторадже
в точке входа мы запускаем в юзэффекте эффект который запросит по апишке данные currentUser
так вот этот эффект нужно дергать только если токен есть
хочется сделать это лучшим из способов
юзать стору и ифом в юзэффекте не хочется (боюсь это создаст проблемы)
по-эффектор-way хочется
ну я описал в таком случае ответ уже выше с гейтом)
источник

ZS

Znacovean Simion in ☄️ effector
Yan👀 Lobaty
ну я описал в таком случае ответ уже выше с гейтом)
ну гейты я не юзал никогда и не понимаю до конца зачем в нашем кейсе они)
но спасибо)
источник

YL

Yan👀 Lobaty in ☄️ effector
Znacovean Simion
ну гейты я не юзал никогда и не понимаю до конца зачем в нашем кейсе они)
но спасибо)
возможность прокидывать пропсы в гейт и участие их в бизнес-логике
но для вашего кейса возможно простейшее трактование - замена useEffect
используя useGate вы его "инициализируете в компоненте" и как только этот компонент будет замаунчен тригернется событие Gate.open
источник

YL

Yan👀 Lobaty in ☄️ effector
источник

YL

Yan👀 Lobaty in ☄️ effector
вот пример
источник

ZS

Znacovean Simion in ☄️ effector
Я сделал так
надеюсь этот вариант неплохой)

export const getCurrentUser getCurrentUser = createEvent();

export const getCurrentUserFx getCurrentUserFx = rootDomainrootDomain.createEffect({
 handler:
async ({ accessToken }) => accessToken && (await APIAPI.get<UserData>(urls.getUser(0))),
});


sample({
 source:
$auth as any$auth as any,
 clock:
getCurrentUsergetCurrentUser,
 target:
getCurrentUserFxgetCurrentUserFx,
});



// в точке входа (_app.tsx в next.js)

React.useEffect(() => {
 
getCurrentUsergetCurrentUser();
}, []);
источник

🦜

🦜 in ☄️ effector
Znacovean Simion
Я сделал так
надеюсь этот вариант неплохой)

export const getCurrentUser getCurrentUser = createEvent();

export const getCurrentUserFx getCurrentUserFx = rootDomainrootDomain.createEffect({
 handler:
async ({ accessToken }) => accessToken && (await APIAPI.get<UserData>(urls.getUser(0))),
});


sample({
 source:
$auth as any$auth as any,
 clock:
getCurrentUsergetCurrentUser,
 target:
getCurrentUserFxgetCurrentUserFx,
});



// в точке входа (_app.tsx в next.js)

React.useEffect(() => {
 
getCurrentUsergetCurrentUser();
}, []);
А почему на сервере не делаете запрос?
источник

🦜

🦜 in ☄️ effector
В чем прикол этого запроса на клиенте
источник

🦜

🦜 in ☄️ effector
Znacovean Simion
Я сделал так
надеюсь этот вариант неплохой)

export const getCurrentUser getCurrentUser = createEvent();

export const getCurrentUserFx getCurrentUserFx = rootDomainrootDomain.createEffect({
 handler:
async ({ accessToken }) => accessToken && (await APIAPI.get<UserData>(urls.getUser(0))),
});


sample({
 source:
$auth as any$auth as any,
 clock:
getCurrentUsergetCurrentUser,
 target:
getCurrentUserFxgetCurrentUserFx,
});



// в точке входа (_app.tsx в next.js)

React.useEffect(() => {
 
getCurrentUsergetCurrentUser();
}, []);
Можно просто гвард заюзать
источник