Я всегда видя в резюме список технологий, прошу рассказать о недостатках пары представленных. Работает безотказно! Например, самый частый случай — module federation, только попросишь рассказать, так сразу — нууу, настраивал не я, там целая команда, бла, бла, бла…
Какая-то безусловно, вопрос в количестве. Понятно, что из-за того как Map устроен, когда мы что-то в неё кладем, как минимум создается один объект типа { key: , value: }, и под него выделяется память. Я это имел ввиду.
Лишний вызов функции + непривычный способ обращения к свойству + высокая вероятность опечататься.
sotre.update(() => store.$.user.age, 4)
Лишний вызов уже двух функций + лишний чужеродный $.
Меньше шаблонов, разработка становится быстрее, предсказуемее и приятнее тогда, когда вы не заставляете разработчика использовать сомнительные конструкциии/обертки для того, что бы удовлетворить потребности вашей «реактивной системы нового поколения».
Это хороший аргумент. В kr-observable, например, для этих целей используется один раз аллоцированный Map, который очищается перед выполнением эффекта, а во время выполнения в него кладутся ссылки на прочитанные объекты. К новым аллокациям это не приводит. Если в mobx также, то это дешевле чем structural sharing.
Сделайте с сеттерами пачку из 100 изменений, вызвав эффект лишь один раз по окончании пачки. Например, в массиве 100 объектов нужно выставить у каждого "active = false" и не триггернуть 100 последовательных перерисовок.
Пожалуйста
import { makeObservable, autorun } from "https://esm.sh/kr-observable";
const { data } = makeObservable({ data: [] });
for (let i = 0; i < 100; i++) {
data.push({ active: false, id: i });
}
autorun(() => {
console.log('effect', data.every(el => el.active === true))
})
data.forEach(el => el.active = true);
Лог:
effect false
effect true
Скопируйте, и вставьте на codepen.io (не могу дать ссылку, потому что из рабочей сети он заблокирован).
Хоть это и странно, ибо если предлагаете – сами и продайте мне это. Убедите в том, что мне это нужно. Но ладно, мне не сложно:
$my_card_gallery $my_view
Что означает $my_card_gallery? А $my_view? Зачем нужен знак доллара? Пока непонятно.
count 0
А count это что? Наверное какая-то переменная, а 0, это видимо значение по умолчанию. Ну ок. Тогда получается, что ответ на предыдущий вопрос такой: $my_card_gallery это переменная, а $my_view это значение по умолчанию, хотя что такое $my_view все еще совершенно непонятно.
kids /
Эммм... Кажется, что kids это тоже переменная, а значение по умолчанию /? Как-то не верится, возможно предыдущие мои выводы – ошибочны.
Обоснуйте
Я прочитал всего пару строк, а вместо того, чтобы понять что тут написано, у меня накопилась куча вопросов.
Идем дальше.
<= Panel $my_panel
Тут какое-то выражение. Сходу кажется что один операнд забыт, а Panel это как тип для $my_panel. Это очень странно. Представляю, будто это какой-то строго-типизированный язык, но настолько строго, что тип нужно указывать каждый раз обращаясь к переменной, типа так:
for (int i = 0; int i <= int 5; int i++) {
System.out.println("Итерация: " + int i);
}
Наверное я ошибаюсь, но это что-то, что я пока понять не могу. Идем дальше:
tools /
<= tools /
Да что такое то! Пропускаем. Может разгадка будет ниже.
<= Close $my_button
hint @ \Close Gallery
click? <=> close? null
kids / <= Close_icon $my_icon_close
F***k! Так, ладно. Очевидно все эти /\><=, это какие-то операторы, но как тогда это читать, и причем тут разметка?
Ну, вообще говоря, он тоже не идеален. Меня очень смущает DSL и магия компилятора.
// v-bind:href – это что?
// "url" – выглядит как текст, а на деле переменная
<a v-bind:href="url"
// v-on:click – это что?
// "doSomething" – выглядит как текст, а на деле переменная
<a v-on:click="doSomething"
// и т.д.
<div v-bind:id= // ?
<time :title="toTitleDate(date)" :datetime="date" // ?
<p v-if="seen" // ?
Даже если в реальности данные нужно получить, я бы предпочел держать для этого отдельный метод, а свойство пусть останется свойством.
Еще вопрос как такое состояние шарить между компонентами. Можно ли им в конструктор что-то передать состояние из вне? Как вызвать ререндер при изменении состояния?
Мой любимый прием)
Я всегда видя в резюме список технологий, прошу рассказать о недостатках пары представленных. Работает безотказно! Например, самый частый случай — module federation, только попросишь рассказать, так сразу — нууу, настраивал не я, там целая команда, бла, бла, бла…
Какая-то безусловно, вопрос в количестве. Понятно, что из-за того как Map устроен, когда мы что-то в неё кладем, как минимум создается один объект типа { key: , value: }, и под него выделяется память. Я это имел ввиду.
Не знаю, что я из этого должен понять.
MyCoolMap использовал чтобы удобнее было фильтровать по классу.
Что именно мы пытаемся проверить?
Напрямую это так:
store.user.age = 5
Лишний вызов функции + непривычный способ обращения к свойству + высокая вероятность опечататься.
Лишний вызов уже двух функций + лишний чужеродный
$
.Меньше шаблонов, разработка становится быстрее, предсказуемее и приятнее тогда, когда вы не заставляете разработчика использовать сомнительные конструкциии/обертки для того, что бы удовлетворить потребности вашей «реактивной системы нового поколения».
Да, проверял.
Это хороший аргумент. В kr-observable, например, для этих целей используется один раз аллоцированный Map, который очищается перед выполнением эффекта, а во время выполнения в него кладутся ссылки на прочитанные объекты. К новым аллокациям это не приводит. Если в mobx также, то это дешевле чем structural sharing.
Разрешите не согласится.
Увы, но нет.
Пожалуйста
Лог:
Скопируйте, и вставьте на codepen.io (не могу дать ссылку, потому что из рабочей сети он заблокирован).
или
Предположу, что даже без малейшего представления об XML, большинство поймет что тут описано. Так что нет, я выдаю нечитаемость за нечитаемость.
Хоть это и странно, ибо если предлагаете – сами и продайте мне это. Убедите в том, что мне это нужно. Но ладно, мне не сложно:
Что означает
$my_card_gallery
? А$my_view
? Зачем нужен знак доллара? Пока непонятно.А count это что? Наверное какая-то переменная, а 0, это видимо значение по умолчанию. Ну ок. Тогда получается, что ответ на предыдущий вопрос такой:
$my_card_gallery
это переменная, а$my_view
это значение по умолчанию, хотя что такое$my_view
все еще совершенно непонятно.Эммм... Кажется, что
kids
это тоже переменная, а значение по умолчанию/
? Как-то не верится, возможно предыдущие мои выводы – ошибочны.Я прочитал всего пару строк, а вместо того, чтобы понять что тут написано, у меня накопилась куча вопросов.
Идем дальше.
Тут какое-то выражение. Сходу кажется что один операнд забыт, а Panel это как тип для $my_panel. Это очень странно. Представляю, будто это какой-то строго-типизированный язык, но настолько строго, что тип нужно указывать каждый раз обращаясь к переменной, типа так:
Наверное я ошибаюсь, но это что-то, что я пока понять не могу. Идем дальше:
Да что такое то! Пропускаем. Может разгадка будет ниже.
F***k!
Так, ладно. Очевидно все эти
/\><=
, это какие-то операторы, но как тогда это читать, и причем тут разметка?Ок, что там еще?
Если пустота меньше или равно Card помноженный на 0, тогда $my_card, иначе, если title меньше или равно card_title помноженный на... Нет. Я сломался.
Я не знаю как иначе объяснить, что это нечитаемо.
Я фронтендер, мне было интересно и познавательно. Спасибо.
Пы сы: дотнет в глаза никогда не видел))
Так ведь действительно нечитаемый. Имхо
JSX это JS и HTML одновременно, так что видя угловую скобку, я воспринимаю это как HTML.
Я про JSX, а не React. В Preact, например, я пишу class, а не className, for а не htmlFor и т.д. И это JSX.
Приведите пример, где JSX выглядит более дико. Мне к jsx привыкать не приходилось.
Звучит как тавтология.
Вот счастье то! )) Типа мне HTML/JS/CSS недостаточно, надо еще привыкать к DSL-ю Vue. А ради чего?
Ну, вообще говоря, он тоже не идеален. Меня очень смущает DSL и магия компилятора.
В этом смысле JSX выглядит немного привычнее.
Шо, опять?
Да.
Каким образом? За этой функцией заменяющей свойство, точно также есть какой-то объект хранящий это значение, будь это хоть переменной в замыкании.
Даже если в реальности данные нужно получить, я бы предпочел держать для этого отдельный метод, а свойство пусть останется свойством.
Еще вопрос как такое состояние шарить между компонентами. Можно ли им в конструктор что-то передать состояние из вне? Как вызвать ререндер при изменении состояния?