Size: a a a

2020 August 13

З

Завтра in ☄️ effector
🚀🔬 🚀🔬🚀🔬
кстати, я только сейчас вспомнил, если тебя беспокоит большое количество вызовов useStore , то можно заюзать createComponent

const App = createComponent({foo, bar}, (props, {foo, bar}) => {

})
и большое количество вызовов useStore перестанет ощущаться как проблема)
источник

🚀🚀

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

Б

Богдан in ☄️ effector
🚀🔬 🚀🔬🚀🔬
кстати, я только сейчас вспомнил, если тебя беспокоит большое количество вызовов useStore , то можно заюзать createComponent

const App = createComponent({foo, bar}, (props, {foo, bar}) => {

})
Все равно я вижу дублирование - помимо обращения в нужном месте шаблона стор еще нужно  указать в параметрах createComponent а в примере который я привел, стор нигде кроме как при считывании в шаблоне нигде дополнительно не указывается
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
почему нигде, а вызовы autoSub
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
короче попробуй реализовать)
источник

Б

Богдан in ☄️ effector
🚀🔬 🚀🔬🚀🔬
почему нигде, а вызовы autoSub
Так это только один раз при создании стора, если вынести в некий враппер получим создание сразу и автоподписки, а с useStore или createComponent нужно будет указывать каждый раз в компонентах (я вижу известную проблему "double declaration problem") а так один раз указал и дальше юзаешь в компонентах без какого либо дополнительного дублирования
const createAutoSubStore = (...args) => {
 const store = createStore(...args);
 return [store, autoSub(store)];
}

const [store1, store1Value] = createAutoSubStore(...);
const [store2, store2Value] = createAutoSubStore(...);
const [store3, store3Value] = createAutoSubStore(...);

const App = component(() => {
 return <>
   <div>{store1Value()}</div>
   {someFlag
      ? <div>{store2Value()}</div>
      : <div>{store3Value()}</div>
   }
 </>
})
Кстати помимо решения проблемы "double declaration problem", мы получаем еще дополнительную оптимизацию (в отличие от createComponent или useStore) - компонент будет подписан только на те сторы которые находятся в активном бранче условия - то есть если someFlag === true то компонент будет обновляться только когда меняется store2 и не будет реагировать на store1 потому что он от него временно не зависит (ну и наоборот когда someFlag === false)
источник

ip

ivan posokhin in ☄️ effector
обновил эффектор и получил варнинг "sample clock shape is deprecated" что это значит?
источник

ф

фильтруй мысли... in ☄️ effector
ivan posokhin
обновил эффектор и получил варнинг "sample clock shape is deprecated" что это значит?
источник

ip

ivan posokhin in ☄️ effector
это странно
источник

ф

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

ip

ivan posokhin in ☄️ effector
а в 21 версии есть какие то breaking changes?
источник

ф

фильтруй мысли... in ☄️ effector
ivan posokhin
обновил эффектор и получил варнинг "sample clock shape is deprecated" что это значит?
точно версия 21.2.2?
источник

ip

ivan posokhin in ☄️ effector
фильтруй мысли
точно версия 21.2.2?
нет у меня 20 была, я обновил до последней 20.17.2
источник

ip

ivan posokhin in ☄️ effector
и словил это предупреждение
источник

D

Draft in ☄️ effector
Богдан
Так это только один раз при создании стора, если вынести в некий враппер получим создание сразу и автоподписки, а с useStore или createComponent нужно будет указывать каждый раз в компонентах (я вижу известную проблему "double declaration problem") а так один раз указал и дальше юзаешь в компонентах без какого либо дополнительного дублирования
const createAutoSubStore = (...args) => {
 const store = createStore(...args);
 return [store, autoSub(store)];
}

const [store1, store1Value] = createAutoSubStore(...);
const [store2, store2Value] = createAutoSubStore(...);
const [store3, store3Value] = createAutoSubStore(...);

const App = component(() => {
 return <>
   <div>{store1Value()}</div>
   {someFlag
      ? <div>{store2Value()}</div>
      : <div>{store3Value()}</div>
   }
 </>
})
Кстати помимо решения проблемы "double declaration problem", мы получаем еще дополнительную оптимизацию (в отличие от createComponent или useStore) - компонент будет подписан только на те сторы которые находятся в активном бранче условия - то есть если someFlag === true то компонент будет обновляться только когда меняется store2 и не будет реагировать на store1 потому что он от него временно не зависит (ну и наоборот когда someFlag === false)
а чем не угодил combine ? const $stores = combine($store1, $store2, $store3), а в компоненте useStore($stores)
источник

ф

фильтруй мысли... in ☄️ effector
ivan posokhin
а в 21 версии есть какие то breaking changes?
источник

ф

фильтруй мысли... in ☄️ effector
ivan posokhin
и словил это предупреждение
рекомендую обновиться до 21-й
источник

ip

ivan posokhin in ☄️ effector
вроде никаких ломающих изменений не увидел 🤔
источник

ф

фильтруй мысли... in ☄️ effector
@ZeroBias может этот коммит нужно внести в 20-ю версию?
источник

ф

фильтруй мысли... in ☄️ effector
Богдан
Народ, а есть ли в эффекторе возможность не вызывать каждый раз useStore а сразу получать значения в шаблонах?
Используя useStore приходится писать так
const App = () => {
 const value1 = useStore(store1);
 const value2 = useStore(store2);
 const value3 = useStore(store3);
 const value4 = useStore(store4);
 const value5 = useStore(store5);

 return (
   <div>
     <div>{value1}</div>
     <div>{value2}</div>
     <div>{value3}</div>
     <div>{value4}</div>
     <div>{value5}</div>
   </div>
 )
}
а я хочу писать как-то так (читать переменные сразу в шаблоне например вызывая через функцию без необходимости дублировать эти переменные через useStore)
const App = () => {
 return (
   <div>
     <div>{value1()}</div>
     <div>{value2()}</div>
     <div>{value3()}</div>
     <div>{value4()}</div>
     <div>{value5()}</div>
   </div>
 )
}
И можно было бы написать простой враппер const value1 = () => useStore(store1) - но проблема в том реакт выдаст ошибку (или будут баги) если вызывать useStore внутри условий - <div>{someFlag ? value1() : value2()}</div>
я тоже пишу useStore инлайн, по необходимости выношу хуки наверх; если их становится много или появляются условия, то выношу в отдельные компоненты
источник