Size: a a a

2020 November 26

🦜

🦜 in ☄️ effector
🚀🔬 🚀🔬🚀🔬
не, я понимаю, поэтому и говорю, что как красиво можно сделать чуть позже, когда хотя бы сокеты не будут вызывать вопросы)

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

если совместить его гист с примером выше, то получится как-то так:

useEffect(() => {
 fetch({
   method: 'binanceApp',
   params: {
     extraExit: true,
     extraPrice: currentPrice,
     extraTaker: takerComission
   }
 })
}, [currentPrice, takerComission])


в итоге компонент знает лишь про то, что существует функция fetch, а что она делает уже не так важно

но в примере есть опциональное усложнение — подразумевается, что нужно ждать ответа через сокет, поэтому то и используется эффект. если ожидание ответного сообщения не требуется, то всё это может выглядеть как-нибудь так:

const fetch = createEvent()

fetch.watch(({method, params}) => {
 socket.emit(method, params)
})
Ответ да, более специфичный кейс, т.к я не знал еще на тот момент, что можно было подписать стор
источник

🦜

🦜 in ☄️ effector
попробую переделать гист
источник

🦜

🦜 in ☄️ effector
как раз появился attach, что позволит реюзать fetch
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
🦜
попробую переделать гист
👍
источник

TG

Timofey Goncharov in ☄️ effector
Как предпочитаете создавать эффекты?
Анонимный опрос
58%
const someFx = createEffect(() => {})
42%
const someFx = createEffect({handler: () => {}})
Проголосовало: 24
источник

c⁣

createStore<🦉>... in ☄️ effector
Timofey Goncharov
Как предпочитаете создавать эффекты?
Анонимный опрос
58%
const someFx = createEffect(() => {})
42%
const someFx = createEffect({handler: () => {}})
Проголосовало: 24
createEffect({
 handler() {}
})

не вижу смысла в стрелке
источник

c⁣

createStore<🦉>... in ☄️ effector
а ещё чаще вот так:

const someFx = createEffect<P, D, F>();

// ...


someFx.use(fn)
источник

FA

Fedorchuk Artem in ☄️ effector
🚀🔬 🚀🔬🚀🔬
не, я понимаю, поэтому и говорю, что как красиво можно сделать чуть позже, когда хотя бы сокеты не будут вызывать вопросы)

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

если совместить его гист с примером выше, то получится как-то так:

useEffect(() => {
 fetch({
   method: 'binanceApp',
   params: {
     extraExit: true,
     extraPrice: currentPrice,
     extraTaker: takerComission
   }
 })
}, [currentPrice, takerComission])


в итоге компонент знает лишь про то, что существует функция fetch, а что она делает уже не так важно

но в примере есть опциональное усложнение — подразумевается, что нужно ждать ответа через сокет, поэтому то и используется эффект. если ожидание ответного сообщения не требуется, то всё это может выглядеть как-нибудь так:

const fetch = createEvent()

fetch.watch(({method, params}) => {
 socket.emit(method, params)
})
Спасибо 👍🏼
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
createStore<🦉> ⁣
а ещё чаще вот так:

const someFx = createEffect<P, D, F>();

// ...


someFx.use(fn)
при использовании use недостаток в том, что нужно вручную указывать типы, когда есть тип ошибки это нормально, но в более типичном случае достаточно просто передать функцию
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Timofey Goncharov
Как предпочитаете создавать эффекты?
Анонимный опрос
58%
const someFx = createEffect(() => {})
42%
const someFx = createEffect({handler: () => {}})
Проголосовало: 24
первый вариант более сокращённый, появился недавно, как раз для случая когда кроме handler никаких опций нет
источник

c⁣

createStore<🦉>... in ☄️ effector
🚀🔬 🚀🔬🚀🔬
при использовании use недостаток в том, что нужно вручную указывать типы, когда есть тип ошибки это нормально, но в более типичном случае достаточно просто передать функцию
в большинстве случаев у меня есть имена для типов
поэтому так сильно проще
источник

AV

Andrey V in ☄️ effector
Всем привет!
Использую следующий подход для оформления стора с набором эвентсов и эфектов:

export function createExempleModel() {
 // ======================= Events init

 const event1 = createEvent<number>();
 const event2 = createEvent<number>();

 // ====================== efects

 const effect1 = createEffect({
   async handler() {
     const a = 5;
     event1(a);
   },
 });

 // ===================== store description

 const claimAttachmentsStore = createStore<number>(3);
 claimAttachmentsStore
   .on(event1, (oldState, val) => {
     return val;
   })
   .on(event2, (oldState, val) => {
     return val * val;
   });

 return {
   claimAttachmentsStore,
   event1,
   event2,
   effect1,
 };
}


Так можно или с эффектором лучше подругому?
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
🚀🔬 🚀🔬🚀🔬
первый вариант более сокращённый, появился недавно, как раз для случая когда кроме handler никаких опций нет
из существующих опций там могут быть вручную заданные sid и name, ещё гипотетически можно добавить что-нибудь типа done/fail для шортхэнда форварда из данных юнитов эффектора
источник

DS

Dmitriy Shuleshov in ☄️ effector
Andrey V
Всем привет!
Использую следующий подход для оформления стора с набором эвентсов и эфектов:

export function createExempleModel() {
 // ======================= Events init

 const event1 = createEvent<number>();
 const event2 = createEvent<number>();

 // ====================== efects

 const effect1 = createEffect({
   async handler() {
     const a = 5;
     event1(a);
   },
 });

 // ===================== store description

 const claimAttachmentsStore = createStore<number>(3);
 claimAttachmentsStore
   .on(event1, (oldState, val) => {
     return val;
   })
   .on(event2, (oldState, val) => {
     return val * val;
   });

 return {
   claimAttachmentsStore,
   event1,
   event2,
   effect1,
 };
}


Так можно или с эффектором лучше подругому?
Сколько раз в приложении будет вызван криетор createExempleModel?
источник

AV

Andrey V in ☄️ effector
обычно один, но в теории возможно несколько
источник

DS

Dmitriy Shuleshov in ☄️ effector
Andrey V
обычно один, но в теории возможно несколько
Если он будет вызван один раз - то в нем нет необходимости, можно сразу объявлять и экспортировать юниты
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Andrey V
Всем привет!
Использую следующий подход для оформления стора с набором эвентсов и эфектов:

export function createExempleModel() {
 // ======================= Events init

 const event1 = createEvent<number>();
 const event2 = createEvent<number>();

 // ====================== efects

 const effect1 = createEffect({
   async handler() {
     const a = 5;
     event1(a);
   },
 });

 // ===================== store description

 const claimAttachmentsStore = createStore<number>(3);
 claimAttachmentsStore
   .on(event1, (oldState, val) => {
     return val;
   })
   .on(event2, (oldState, val) => {
     return val * val;
   });

 return {
   claimAttachmentsStore,
   event1,
   event2,
   effect1,
 };
}


Так можно или с эффектором лучше подругому?
вместо event1 можно использовать нативный эвент завершения эффекта doneData

const effect1 = createEffect(async () => 5)

claimAttachmentsStore.on(effect1.doneData, (_, result) => result)
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Dmitriy Shuleshov
Если он будет вызван один раз - то в нем нет необходимости, можно сразу объявлять и экспортировать юниты
++
источник

AV

Andrey V in ☄️ effector
Возможно будет одновременно несколько моделей
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
скорее всего они будут различаться, вполне нормально описать каждую отдельно как только появится конкретная задача, не загадывая на будущее
источник