Size: a a a

2020 September 18

DS

Dmitriy Shuleshov in ☄️ effector
Theo Roosio
👍 а у еffectora нету твиттер аккаунта? Чтобы люди сразу переходили если будет хоть какой-то интерес
источник

ф

фильтруй мысли... in ☄️ effector
ага
источник

c⁣

createStore<🦉>... in ☄️ effector
🚀🔬 🚀🔬🚀🔬
зачем сид, ему достаточно было перенести уже обговорённый код выше в хук
Тоже верно
источник

c⁣

createStore<🦉>... in ☄️ effector
Vasili
Написал небольшой хелпер чтобы иметь совместимость со svelte/store...

https://svelte.dev/docs#Store_contract

import type { Writable } from "svelte/store";
import type { Store } from "effector"
import { createEvent } from "effector";

export function asSvelteStore<T>(store: Store<T>) {
   const set = createEvent<T>();

   const newStore = store.map(x => x).on(set, alwaysNew);

   const svelteStore: Writable<T> = {
       ...newStore,
       set,
       update(updater) {
           set(updater(newStore.getState()))
       }
   };

   return svelteStore;
}
alwaysNew?
источник

V

Vasili in ☄️ effector
Oops, по сути это const alwaysNew = (_, state) => state
источник

V

Vasili in ☄️ effector
Но с тайпингами
источник

V

Vasili in ☄️ effector
Не у компа сейчас...
источник

c⁣

createStore<🦉>... in ☄️ effector
Vasili
Это хорошо... но тогда уже стоило и .set добавить
Не нужно
источник

c⁣

createStore<🦉>... in ☄️ effector
Изменение должно быть через ивент
источник

V

Vasili in ☄️ effector
Расскажите это свелтовскому оператору bind
источник

V

Vasili in ☄️ effector
createStore<🦉> ⁣
Не нужно
Если целью была совместимость со svelte...
источник

c⁣

createStore<🦉>... in ☄️ effector
Vasili
Расскажите это свелтовскому оператору bind
Еще одна причина его не юзать. У стора есть .setState
источник

V

Vasili in ☄️ effector
Тогда подскажите как сделать <select> с динамическим value без bind
источник

yv

yumaa verdin in ☄️ effector
Vasili
Написал небольшой хелпер чтобы иметь совместимость со svelte/store...

https://svelte.dev/docs#Store_contract

import type { Writable } from "svelte/store";
import type { Store } from "effector"
import { createEvent } from "effector";

export function asSvelteStore<T>(store: Store<T>) {
   const set = createEvent<T>();

   const newStore = store.map(x => x).on(set, alwaysNew);

   const svelteStore: Writable<T> = {
       ...newStore,
       set,
       update(updater) {
           set(updater(newStore.getState()))
       }
   };

   return svelteStore;
}
а зачем создавать новый мапнутый стор, который потом деконструировать. нельзя просто методы к существующему стору добавить?
источник

V

Vasili in ☄️ effector
yumaa verdin
а зачем создавать новый мапнутый стор, который потом деконструировать. нельзя просто методы к существующему стору добавить?
Не люблю, когда форма обновляет состояние, которое ей не принадлежит
источник

V

Vasili in ☄️ effector
А деконструкция чтобы тайп-чекер успокоить
источник

V

Vasili in ☄️ effector
Хотя если есть метод setState то можно и упростить...
источник

V

Vasili in ☄️ effector
Может быть даже на уровне прототипа
источник

yv

yumaa verdin in ☄️ effector
Vasili
Написал небольшой хелпер чтобы иметь совместимость со svelte/store...

https://svelte.dev/docs#Store_contract

import type { Writable } from "svelte/store";
import type { Store } from "effector"
import { createEvent } from "effector";

export function asSvelteStore<T>(store: Store<T>) {
   const set = createEvent<T>();

   const newStore = store.map(x => x).on(set, alwaysNew);

   const svelteStore: Writable<T> = {
       ...newStore,
       set,
       update(updater) {
           set(updater(newStore.getState()))
       }
   };

   return svelteStore;
}
а метод update кому требуется? в контракте вроде только set, или я не углядел
источник

V

Vasili in ☄️ effector
yumaa verdin
а метод update кому требуется? в контракте вроде только set, или я не углядел
В тайпингах на Writable<T> нужно оба... А другого совместимого интерфейса пока не нашел
источник