Size: a a a

2020 June 07

P

Paruyr🛸🪐🌏 in ☄️ effector
lllla
Возможно, будет вот такая штука 🙂
Осталось типы написать и тесты
И хуки проверить
Vue 2 :-(
Я вот такие байндинги накидал для vue composition api

export function useStore<State>(store: Store<State>): ReadonlyRef<State> {
 const stateRef = ref<any>();
 const unwatch = store.watch(state => {
   stateRef.value = state;
 });
 onUnmounted(unwatch);
 return stateRef;
}

export function useStoreMap<State, Result>(
 store: Store<State>,
 fn: (state: State) => Result,
): ReadonlyRef<Result> {
 const stateRef = useStore(store);
 return computed(() => fn(stateRef.value));
}
источник

YL

Yan👀 Lobaty in ☄️ effector
Paruyr🛸🪐🌏
let intervalId: any;

// Store<TrackindId | null>
$trackingServiceId.watch(trackingId => {
 clearInterval(intervalId);

 if (trackingId !== null) {
   intervalId = setInterval(() => {
     timeTracked(trackingId);
   }, 1000);
 }
});


Как подобное правильно реализовать декларативно?
Апдейт стора по таймеру?
источник

P

Paruyr🛸🪐🌏 in ☄️ effector
Да
источник

YL

Yan👀 Lobaty in ☄️ effector
Какая реакция на timeTracked?
источник

P

Paruyr🛸🪐🌏 in ☄️ effector
Yan👀 Lobaty
Какая реакция на timeTracked?
стор подписан, но это неважно
источник

YL

Yan👀 Lobaty in ☄️ effector
Можно сделать эффект который будет резволвится по таймауту
Из стора форвардить в него
А из done этого эффекта вызывать timeTracked
источник

YL

Yan👀 Lobaty in ☄️ effector
Paruyr🛸🪐🌏
стор подписан, но это неважно
Важно кто апдейтить стор этот будет
Пример в репле был все же лучше
источник

YL

Yan👀 Lobaty in ☄️ effector
Paruyr🛸🪐🌏
let intervalId: any;

// Store<TrackindId | null>
$trackingServiceId.watch(trackingId => {
 clearInterval(intervalId);

 if (trackingId !== null) {
   intervalId = setInterval(() => {
     timeTracked(trackingId);
   }, 1000);
 }
});


Как подобное правильно реализовать декларативно?
И еще мапнутый стор от трекингид чтобы чекать что он не нул
источник

YL

Yan👀 Lobaty in ☄️ effector
Чтобы запускать цепочку если пришел не нулл апдейт
источник

P

Paruyr🛸🪐🌏 in ☄️ effector
Я правильно понимаю что если функция переданная в .map возвращате undefined, то стор не изменится?
источник

YL

Yan👀 Lobaty in ☄️ effector
Paruyr🛸🪐🌏
Я правильно понимаю что если функция переданная в .map возвращате undefined, то стор не изменится?
Да
источник

YL

Yan👀 Lobaty in ☄️ effector
Paruyr🛸🪐🌏
Я правильно понимаю что если функция переданная в .map возвращате undefined, то стор не изменится?
Но в твоем случае тебе нужно типо if (id !== null) return id
источник

YL

Yan👀 Lobaty in ☄️ effector
Потому что он в дальнейшей цепочке вычислений используется
источник

YL

Yan👀 Lobaty in ☄️ effector
Если будет просто return id !== null
В сторе будет true/false лежать
источник

P

Paruyr🛸🪐🌏 in ☄️ effector
Да, это я понял уже )
источник

P

Paruyr🛸🪐🌏 in ☄️ effector
Type 'Store<TrackingId | undefined>' is not assignable to type 'Unit<TrackingId>'.
Ох блин тайпскрипт ругается
источник

P

Paruyr🛸🪐🌏 in ☄️ effector
Store<TrackingId | undefined> это тип возвращаемый .map (
источник

P

Paruyr🛸🪐🌏 in ☄️ effector
Можно же это guard-ом сделать не?
источник

YL

Yan👀 Lobaty in ☄️ effector
Paruyr🛸🪐🌏
Можно же это guard-ом сделать не?
+
источник

YL

Yan👀 Lobaty in ☄️ effector
Интуиция тебя не подвела)
источник