Size: a a a

2020 July 10

З

Завтра in ☄️ effector
Я тут подумал, а что, если добавить механизм ручного обновления элементов от сторов
Условно h("div", { watch: $store }) и дети пересчитываются при апдейте стора
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Timofey Goncharov
вопрос не по эффектору, но тут есть люди которые шарят в алгоритмах и структурах данных)

есть такая структура данных:

const obj = {
 a: {
   b: [{target: '0'}, {target: '1'}],
   c: {'target: '2'},
 },
 d: {'target: '2'},
};


вам нужно часто проходить по всем полям на последнем уровне вложенности.
самое глубокое значение всегда одного вида {target: ''}.
но оно может лежать в любой вложенности или в массивах (или в массивах массивов).
постоянно использовать рекурсию  будет дорого и получиться трудный алгоритм.
что бы решить эту проблему я перевел всю эту структуру в такой хешобъект:

{
 'a.b[0]': {}
 'a.b[1]': {}
 'a.c': {}
}
теперь без рекурсии я могу бегать по полям сколько хочу.
но вот удалить уже проблема.
проблема именно с удалением полей которые лежат в массиве, потому что при удалении элемента массива, в нем не должна образоваться дырка, другие индексы должны сместиться
кто нибудь может подсказать решение?
глянь тред про редактирование дерева, там как раз показан этот принцип https://t.me/effector_ru/136077
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Завтра
Я тут подумал, а что, если добавить механизм ручного обновления элементов от сторов
Условно h("div", { watch: $store }) и дети пересчитываются при апдейте стора
это как
источник

TG

Timofey Goncharov in ☄️ effector
🚀🔬 🚀🔬🚀🔬
глянь тред про редактирование дерева, там как раз показан этот принцип https://t.me/effector_ru/136077
хм спасибо
источник

З

Завтра in ☄️ effector
Это типа
h("div", {
 watch: $store,
 cb () {
   console.log($store.getState())
 }
})

В голове был прикольный юзкейс, но пока шел до пк, забыл 🤦🏻‍♂️
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Timofey Goncharov
хм спасибо
в общем если вкратце, то ты выбрал неправильный способ вычисления айдишников: они у тебя зависят не только от содержимого элемента, но и от окружающей среды, нужно выбирать максимально стабильные айдишники
источник

З

Завтра in ☄️ effector
Короче говоря, чтобы апдейт стора триггерил cb по новой
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
пока такое не поддерживается
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
хотя как ни странно, я с кейсом для твоей идеи столкнулся уже давно)
источник

TG

Timofey Goncharov in ☄️ effector
🚀🔬 🚀🔬🚀🔬
в общем если вкратце, то ты выбрал неправильный способ вычисления айдишников: они у тебя зависят не только от содержимого элемента, но и от окружающей среды, нужно выбирать максимально стабильные айдишники
возможно ты меня не правильно понял. target это не id. для ключей в хеш объекте я поставил path к полю.
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Завтра
Это типа
h("div", {
 watch: $store,
 cb () {
   console.log($store.getState())
 }
})

В голове был прикольный юзкейс, но пока шел до пк, забыл 🤦🏻‍♂️
это динамическая подгрузка статей на zerobias.net: разметка статьи эвалится в код для фореста, соответственно если текст статьи изменился то нужно уничтожить текущий инстанс и вызвать заэваленный колбэк заново
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Timofey Goncharov
возможно ты меня не правильно понял. target это не id. для ключей в хеш объекте я поставил path к полю.
я тебя правильно понял и именно про это и говорю, то что ты сделал это просто необычный способ сгенерировать недостаточно стабильные идентификаторы
источник

🚀🚀

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

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Timofey Goncharov
возможно ты меня не правильно понял. target это не id. для ключей в хеш объекте я поставил path к полю.
фича в простановке парента
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
const itemParent = items[item.parent]
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
где items — это твой хэшобъект
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
🚀🔬 🚀🔬🚀🔬
const itemParent = items[item.parent]
повторив эту операцию ты получишь полный путь к элементу, поэтому этот способ равнозначен записи пути в айдишник
источник

TG

Timofey Goncharov in ☄️ effector
🚀🔬 🚀🔬🚀🔬
повторив эту операцию ты получишь полный путь к элементу, поэтому этот способ равнозначен записи пути в айдишник
но такое подразумевает рекурсию же.
источник

TG

Timofey Goncharov in ☄️ effector
а не хотелось бы с ней иметь дело)
источник

🚀🚀

🚀🔬 🚀🔬🚀🔬... in ☄️ effector
Timofey Goncharov
но такое подразумевает рекурсию же.
это не рекурсия, это while цикл
источник