Size: a a a

2020 October 26

n

null in ☄️ effector
🚀🔬 🚀🔬🚀🔬
поправил, заодно обновил сам пример)
Оперативно, спасибо 👍
источник

NK

ID:0 in ☄️ effector
effector 21.6.0effector 21.6.0

Add support for user-defined factories in fork api. Starting from this release, application developers can use their own functions and be sure that their content will be properly serialized and hydrated by fork api.
New field "factories" in effector/babel-plugin accepts array of module names which exports will be treated as custom factories therefore each function call will provide unique prefix for sid properties of units inside them

{
 "plugins": [
   ["effector/babel-plugin", {
     "factories": ["src/createEffectStatus"]
   }]
 ]
}

// ./src/createEffectStatus
import {rootDomain} from './rootDomain'

export function createEffectStatus(fx) {
 const $status = rootDomain.createStore('init')
   .on(fx.finally, (_, {status}) => status)
 return $status
}

// ./src/statuses
import {createEffectStatus} from './createEffectStatus'
import {fetchUserFx, fetchFriendsFx} from './api'

export const $fetchUserStatus = createEffectStatus(fetchUserFx)
export const $fetchFriendsStatus = createEffectStatus(fetchFriendsFx)


createEffectStatus from './createEffectStatus' was treated as factory function so each store created by it has its own sid and will be handled by serialize independently, although without factories they will share the same sid

factories in documentation

Add user-friendly unit name in fork api error messages when given unit is not found in scope. This improves error messages in both effector and effector-react

Add validation for values and handlers fields in fork and for values field in hydrate

Add type support for createEffect<typeof handler, Error>(handler) to infer Params and Done types from given handler and provide custom Fail type at the same time

createEffect and custom errors in documentation

Improve guard return type inference (PR 406 (thanks @doasync))

Fix void params support for createEffect(name, config) (issue 404)

Allow to use Event<void> in cases when only () => void is accepted (PR 400 (thanks @doasync))

Add support for merge to effector/babel-plugin
источник

NN

Nikita N. in ☄️ effector
🚀🔬 🚀🔬🚀🔬
в таких ситуациях можно сразу класть стор в таргет
о, но как это будет работать?
источник

🦜

🦜 in ☄️ effector
Nikita N.
о, но как это будет работать?
store = newState
источник

DS

Dmitriy Shuleshov in ☄️ effector
Nikita N.
о, но как это будет работать?
Точно так же как в твоём снипете
источник

DS

Dmitriy Shuleshov in ☄️ effector
Nikita N.
const items = createStore([])
const limit = createStore(20);
const limitChanged = createEvent<number>();

есть такой вот набор
Хотел сделать через limitChanged.prepend обработку эвента селекта который мог прислать 20, 40, 60, 'all' и если прокидывают all то хотел выставлять в качестве значения items.length, но понял что не знаю как прокинуть в prepend это значение.
У меня всегда для селектов есть дисплейВелью и велью. Иногда даже на уровне вью
источник

DO

Dmitry Olyenyov in ☄️ effector
А подскажите, мне надо как-то послать определённый event, дождаться пока store обновится, обработав этот event и потом вызвать определённый код. Как лучше сделать? Что-то вроде вот этого, но вынеся bindPersistAction из обработчка rehydrate event
const rehydrate = createEvent<State>("@PERSIST/REHYDRATE");

const bindPersistAction = store.watch((state) => {
 config.storage.setItem(persistKey, JSON.stringify([Date.now(), state]));
});

if (persistedState != null) {
 store.on(rehydrate, (_state, data) => {
   bindPersistAction();
   data;
 });
 rehydrate(parsedState[1]);
}
источник

DO

Dmitry Olyenyov in ☄️ effector
Не могу придумать как красиво это сделать.
источник

c⁣

createStore<🦉>... in ☄️ effector
Dmitry Olyenyov
А подскажите, мне надо как-то послать определённый event, дождаться пока store обновится, обработав этот event и потом вызвать определённый код. Как лучше сделать? Что-то вроде вот этого, но вынеся bindPersistAction из обработчка rehydrate event
const rehydrate = createEvent<State>("@PERSIST/REHYDRATE");

const bindPersistAction = store.watch((state) => {
 config.storage.setItem(persistKey, JSON.stringify([Date.now(), state]));
});

if (persistedState != null) {
 store.on(rehydrate, (_state, data) => {
   bindPersistAction();
   data;
 });
 rehydrate(parsedState[1]);
}
store.watch(rehydrate, () => {
 // done
})
источник

DO

Dmitry Olyenyov in ☄️ effector
Но в доке пишут, что тут должна быть чистая функция. А подскажите, rehydrate() вернёт управление после того, как обновится store? Оно такое же синхронное как в redux? Я по-идее могу вызвать bindPersistAction() сразу после rehydrate(parsedState[1]);?
источник

c⁣

createStore<🦉>... in ☄️ effector
Dmitry Olyenyov
Но в доке пишут, что тут должна быть чистая функция. А подскажите, rehydrate() вернёт управление после того, как обновится store? Оно такое же синхронное как в redux? Я по-идее могу вызвать bindPersistAction() сразу после rehydrate(parsedState[1]);?
функция в watch может быть любой
источник

c⁣

createStore<🦉>... in ☄️ effector
Dmitry Olyenyov
Но в доке пишут, что тут должна быть чистая функция. А подскажите, rehydrate() вернёт управление после того, как обновится store? Оно такое же синхронное как в redux? Я по-идее могу вызвать bindPersistAction() сразу после rehydrate(parsedState[1]);?
но в редюссере да, никаких сайд эффектов быть не должно
источник

DO

Dmitry Olyenyov in ☄️ effector
угу, я перепутал с on. Получается watch тоже может принимать trigger! Да, это сильно всё упрощает.
источник

DO

Dmitry Olyenyov in ☄️ effector
Там в доке опечатка, нет trigger https://effector.dev/docs/api/effector/store#watchwatcher
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
источник

DO

Dmitry Olyenyov in ☄️ effector
Ой :)
источник

DO

Dmitry Olyenyov in ☄️ effector
Там вот так, trigger написан, но не показано где он в параметрах.
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
ой, действительно
источник

DO

Dmitry Olyenyov in ☄️ effector
Мне кажется эти два раздела есть смысл объединить. Я б ни за что не посмотрел на второй overload :) Просто не ожидал, что он есть :)
источник

c⁣

createStore<🦉>... in ☄️ effector
скорее переместить вотчер с триггером повыше

объединять такое себе
ибо у них разное поведение
источник