Size: a a a

2020 August 13

c⁣

createStore<🦉>... in ☄️ effector
🚀🔬 🚀🔬🚀🔬
это кстати связано с возможностями, которые предоставляет forest) в библиотеке есть возможность обновлять одни текстовые ноды, не затрагивая соседние

spec({text: ['static + ', dynamic]})

то есть одна html нода может иметь несколько текстовых нод внутри (реакт например всегда юзает только одну и обновляет весь контент целиком), а при гидрации разделения на текстовые ноды ещё нет, весь текст — непрерывный, поэтому если текстовая нода загрузилась раньше её соседа слева, то у неё просто нет никакой возможности узнать, сколько у неё соседей в принципе, поэтому нужно форсировать загрузку по порядку появления в html, что и даётся с помощью depth first
А как ты понимаешь какая текстовая нода что содержит во время гидрации?
Только на основании содержимого сторов?

В HTML же нет текстовых нод, там просто текст.
<div>first second</div>
Тут может быть две текстовые ноды. И при парсинге, браузер же положит это в одну текстовую ноду, а в коде выясняется, что здесь две текстовые ноды, одна статическая first, другая динамическая second.

Как быть?
источник

DS

Dmitriy Shuleshov in ☄️ effector
🚀🔬 🚀🔬🚀🔬
кстати можно обойтись без merge
Спасибо, что глянул.
источник

DS

Dmitriy Shuleshov in ☄️ effector
🚀🔬 🚀🔬🚀🔬
но там есть одна неопределённость, фактически route выступает одновременно как носитель дом-нод (который должен быть деактивирован если не виден) и как сервис бизнес-логики (который желательно не деактивировать чтобы не потерять часть событий)
Те сейчас вычисление семейства связанных юнитов происходит автоматически в зависимости от того какой компонет стал инвизибл ?
источник

🅅🄺

🅅aleriy 🄺obzar in ☄️ effector
🚀🔬 🚀🔬🚀🔬
это кстати связано с возможностями, которые предоставляет forest) в библиотеке есть возможность обновлять одни текстовые ноды, не затрагивая соседние

spec({text: ['static + ', dynamic]})

то есть одна html нода может иметь несколько текстовых нод внутри (реакт например всегда юзает только одну и обновляет весь контент целиком), а при гидрации разделения на текстовые ноды ещё нет, весь текст — непрерывный, поэтому если текстовая нода загрузилась раньше её соседа слева, то у неё просто нет никакой возможности узнать, сколько у неё соседей в принципе, поэтому нужно форсировать загрузку по порядку появления в html, что и даётся с помощью depth first
так может просто отказаться от такой детализации до текстовых нод?
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
createStore<🦉> ⁣
А как ты понимаешь какая текстовая нода что содержит во время гидрации?
Только на основании содержимого сторов?

В HTML же нет текстовых нод, там просто текст.
<div>first second</div>
Тут может быть две текстовые ноды. И при парсинге, браузер же положит это в одну текстовую ноду, а в коде выясняется, что здесь две текстовые ноды, одна статическая first, другая динамическая second.

Как быть?
при depth first, во время инициализации текстовой ноды, заведомо известно, что все предыдущие ноды уже обработаны, поэтому текстовая нода начинается с начала необработанного контента

<div>foo bar</div>

h('div', {
 text: ['foo ', 'bar']
})


1) начинаем обрабатывать div
у него в firstChild находится Text(foo bar)

2) спускаемся, начинаем обрабатывать первую текстовую ноду.

берём firstChild, мы заведомо знаем что это текстовая нода потому что мы обрабатываем гарантированно первого её чайлда и он — Text

делим текстовую ноду на две — контент и остаток, контент это необходимый нам Text(foo ) а остаток остаётся следующим шагам

3) переходим к соседу, читаем div.lastChild и мы знаем что он Text потому что гарантируется что всех предыдущих соседей мы обработали

делим текстовую ноду на две — контент и остаток, контент это необходимый нам Text(bar)
источник

fe

from earth in ☄️ effector
спасибо, да, рабочий вариант
Но скажи, ты реально думаешь, что это лучше (= читаемее), чем отмена старого запроса при отправке нового?
И то что тебе пришлось onValidResult вынести это кажется неудобство апишки
источник

fe

from earth in ☄️ effector
может можно отправленные параметры в отдельный стор класть и это как-то упростит запись
источник

🚀🚀

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

<div>foo bar</div>

h('div', {
 text: ['foo ', 'bar']
})


1) начинаем обрабатывать div
у него в firstChild находится Text(foo bar)

2) спускаемся, начинаем обрабатывать первую текстовую ноду.

берём firstChild, мы заведомо знаем что это текстовая нода потому что мы обрабатываем гарантированно первого её чайлда и он — Text

делим текстовую ноду на две — контент и остаток, контент это необходимый нам Text(foo ) а остаток остаётся следующим шагам

3) переходим к соседу, читаем div.lastChild и мы знаем что он Text потому что гарантируется что всех предыдущих соседей мы обработали

делим текстовую ноду на две — контент и остаток, контент это необходимый нам Text(bar)
там ещё есть сложность с тем что при форматировании html появляется пустая текстовая нода в самом начале

<div>
 <div></div>
</div>


но к счастью эта ситуация уже была обработано раньше)
источник

c⁣

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

<div>foo bar</div>

h('div', {
 text: ['foo ', 'bar']
})


1) начинаем обрабатывать div
у него в firstChild находится Text(foo bar)

2) спускаемся, начинаем обрабатывать первую текстовую ноду.

берём firstChild, мы заведомо знаем что это текстовая нода потому что мы обрабатываем гарантированно первого её чайлда и он — Text

делим текстовую ноду на две — контент и остаток, контент это необходимый нам Text(foo ) а остаток остаётся следующим шагам

3) переходим к соседу, читаем div.lastChild и мы знаем что он Text потому что гарантируется что всех предыдущих соседей мы обработали

делим текстовую ноду на две — контент и остаток, контент это необходимый нам Text(bar)
воу
тут прям как в классических парсерах языков программирования

что делаешь, если фиксированный контент в середине?

h(‘div’, {
 text: [$a, ‘ foo ‘, $b],
})


разбираешь содержимое на основе значения сторов на момент гидрации? то есть просто достаешь значения, а дальше как раньше?
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
🅅aleriy 🄺obzar
так может просто отказаться от такой детализации до текстовых нод?
это решаемая проблема, полумеры не требуются)
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
createStore<🦉> ⁣
воу
тут прям как в классических парсерах языков программирования

что делаешь, если фиксированный контент в середине?

h(‘div’, {
 text: [$a, ‘ foo ‘, $b],
})


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

c⁣

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

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
но конечно это заставило поломать голову) считаю что переделка breadth first на depth first — это я очень легко отделался 😅 для некоторых задач решения занимают месяцы, а для иных оно не существует вообще, и узнать это нельзя пока не попробуешь)
источник

fe

from earth in ☄️ effector
фильтруй мысли
по сути тебе просто надо фильтрануть fx.done, проверив, актуален ли его результат... сравнить переданные в эффект параметры с текущими данными
ага, но сказать получается намного проще чем записать :/
источник

꧁岡

꧁倫太郎 岡部꧂... in ☄️ effector
слухте, @sovasergey а effector-logger можно шипить на продакнш? или нужно обязательно поменять все импорты на effector?
источник

c⁣

createStore<🦉>... in ☄️ effector
꧁倫太郎 岡部꧂
слухте, @sovasergey а effector-logger можно шипить на продакнш? или нужно обязательно поменять все импорты на effector?
Поменять
источник

꧁岡

꧁倫太郎 岡部꧂... in ☄️ effector
источник

꧁岡

꧁倫太郎 岡部꧂... in ☄️ effector
у меня тут 15 файлов
источник

꧁岡

꧁倫太郎 岡部꧂... in ☄️ effector
а еще сборщик не запускал, еще переписываю все
источник

꧁岡

꧁倫太郎 岡部꧂... in ☄️ effector
когда уже effector devtools extension…
источник