Size: a a a

2020 June 03

D

Dmitry in ☄️ effector
Alexey Malinin
Всем привет. Возникла следующая задача: сделать бесконечный асинхронный цикл с таймаутом, который запрашивает данные с сервера. Особенность всего этого веселья в том, что требуется делать запросы пока стор не null и таймер требуется перезапускать при изменении данных в сторе. На rxjs (redux observable) все это добро выражается лаконично:
const makeColorsEpic = (action$: Observable<ReturnType<typeof successLoad>>) =>
 action$.pipe(
   ofType(succesLoad.type),
   switchMap(action => timer(0, 1000).pipe(
     map(() => makeColors(action.payload.nodes)),
     map(successColors),
     takeUntil(action$.pipe(
       ofType(clear.type)
     ))
   ))
 );


Как сделать так-же элегантно на effector?
Кстати на rx тоже так себе написано
источник

R

Ruslan 🌀 in ☄️ effector
Alexey Anarion
Конечно) Но было бы классно именно создавать производный эффект с мапнутым done аналогично attach
в attch такое добавлять не совсем правильно: получится какой-то монстр, который и prepend делает для эффекта, и результаты мапает, и ещё со сторов данные может получать... название уже не будет соответсвовать сути
источник

AA

Alexey Anarion in ☄️ effector
Ruslan 🌀
в attch такое добавлять не совсем правильно: получится какой-то монстр, который и prepend делает для эффекта, и результаты мапает, и ещё со сторов данные может получать... название уже не будет соответсвовать сути
в attach да, это перегрузит его, но отдельный хелпер можно было бы сделать
источник

R

Ruslan 🌀 in ☄️ effector
Alexey Anarion
в attach да, это перегрузит его, но отдельный хелпер можно было бы сделать
как бы он мог выглядеть?
источник

AA

Alexey Anarion in ☄️ effector
Alexey Anarion
Всем привет!
Есть такой кейс. Аттач позволяет аттачить данные к параметрам эффекта.
А что если мне хочется приаттачить данные к result эффекта.
Кейс родился по причине кривизны бэкенда. У меня чтобы получать приватные ассеты нужно jwt токен передавать в параметре запроса

Что то вроде того:
attachResult({
    source: $jwtToken,
    effect: getUserPhotoFx,
    mapResult: (photos, token) => photos.map((photo) => ({
            ...photo, src: addQueryParameter(photo.src, token)
    }))
})

Я понимаю, что я могу мапнуть done ниже, или даже сэмплануть при передачи в on, но хотелось бы получить эффект модифицированный, так как это было бы очень удобно делать на уровне api

Возможно, это можно как то сделать уже сейчас? Обсуждался ли такой кейс?
По идее необходимость мапать ответ апи может появиться и по другим причинам
Как то так
источник

R

Ruslan 🌀 in ☄️ effector
Alexey Anarion
Всем привет!
Есть такой кейс. Аттач позволяет аттачить данные к параметрам эффекта.
А что если мне хочется приаттачить данные к result эффекта.
Кейс родился по причине кривизны бэкенда. У меня чтобы получать приватные ассеты нужно jwt токен передавать в параметре запроса

Что то вроде того:
attachResult({
    source: $jwtToken,
    effect: getUserPhotoFx,
    mapResult: (photos, token) => photos.map((photo) => ({
            ...photo, src: addQueryParameter(photo.src, token)
    }))
})

Я понимаю, что я могу мапнуть done ниже, или даже сэмплануть при передачи в on, но хотелось бы получить эффект модифицированный, так как это было бы очень удобно делать на уровне api

Возможно, это можно как то сделать уже сейчас? Обсуждался ли такой кейс?
По идее необходимость мапать ответ апи может появиться и по другим причинам
как сделать mapResult для attach:
https://share.effector.dev/m4RAJgXo
источник

R

Ruslan 🌀 in ☄️ effector
Alexey Anarion
в attach да, это перегрузит его, но отдельный хелпер можно было бы сделать
wrapEffect (как attach, но ещё умеет мапать результат или ошибку)
https://share.effector.dev/jHdEa8La
источник

n

null in ☄️ effector
🦜
в repl воспроизводиться ?
я понял почему у меня ошибка была) потому что у меня монорепа и react в корне, а в другом package был свой react модуль, поэтому и ошибка. Спасибо за наводку)
источник

DS

Dmitriy Shuleshov in ☄️ effector
Для hmr в реакт компонентах с эффектором нам по сути нужны те же телодвижения что и при ssr...
источник

DS

Dmitriy Shuleshov in ☄️ effector
🤔
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Alexey Anarion
Всем привет!
Есть такой кейс. Аттач позволяет аттачить данные к параметрам эффекта.
А что если мне хочется приаттачить данные к result эффекта.
Кейс родился по причине кривизны бэкенда. У меня чтобы получать приватные ассеты нужно jwt токен передавать в параметре запроса

Что то вроде того:
attachResult({
    source: $jwtToken,
    effect: getUserPhotoFx,
    mapResult: (photos, token) => photos.map((photo) => ({
            ...photo, src: addQueryParameter(photo.src, token)
    }))
})

Я понимаю, что я могу мапнуть done ниже, или даже сэмплануть при передачи в on, но хотелось бы получить эффект модифицированный, так как это было бы очень удобно делать на уровне api

Возможно, это можно как то сделать уже сейчас? Обсуждался ли такой кейс?
По идее необходимость мапать ответ апи может появиться и по другим причинам
добавление поддержки mapResult в attach немедленно даёт 8 оверлоадов, а mapError делает ещё x2) поэтому от данной идеи временно отказались
источник

R

Rafael 🦠 in ☄️ effector
Есть какое-то соглашение по неймингу доменов?
источник

YL

Yan👀 Lobaty in ☄️ effector
твои доменные области - обзывай как хочешь
источник
2020 June 04

SE

Stanislav Eremenko in ☄️ effector
2500 звёздочек на GitHub :)
источник

AM

Alexey Malinin in ☄️ effector
Всем привет. Создал такую функцию для создания повторяющегося события, которое начитается после одного события и прерывается другим. Можете заревьювить корректность?

function createTimer(after: Event<any>, until: Event<any>, ms: number) {
 const event = createEvent();
 let timer: ReturnType<typeof setInterval> | null = null;
 after.watch(() => {
   event();
   if (timer) {
     clearInterval(timer);
   }
   timer = setInterval(() => event(), ms);
 });

 until.watch(() => {
   if (timer) {
     clearInterval(timer);
     timer = null;
   }
 });

 return event;
}
источник

c⁣

createStore<🦉>... in ☄️ effector
Alexey Malinin
Всем привет. Создал такую функцию для создания повторяющегося события, которое начитается после одного события и прерывается другим. Можете заревьювить корректность?

function createTimer(after: Event<any>, until: Event<any>, ms: number) {
 const event = createEvent();
 let timer: ReturnType<typeof setInterval> | null = null;
 after.watch(() => {
   event();
   if (timer) {
     clearInterval(timer);
   }
   timer = setInterval(() => event(), ms);
 });

 until.watch(() => {
   if (timer) {
     clearInterval(timer);
     timer = null;
   }
 });

 return event;
}
Убрать бы все вотчи
источник

c⁣

createStore<🦉>... in ☄️ effector
И переписать на эффекты
источник

R

Ruslan 🌀 in ☄️ effector
createStore<🦉> ⁣
И переписать на эффекты
можно, только зачем?
источник

c⁣

createStore<🦉>... in ☄️ effector
Ruslan 🌀
можно, только зачем?
разместить эффекты там где они должны быть
источник

c⁣

createStore<🦉>... in ☄️ effector
ну и позволив функции работать в SSR корректно
источник