- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
$(".mobile-filter__footer-popular-btn").on("click",function(e){
e.preventDefault(),
$("#header-mobile").addClass("blue"),
$(this).addClass("active"),
$("#filter-aside-mobile-category-popular").addClass("active")
});
$("#filter-aside-mobile-category-popular .catalog-mobile-menu__close").on("click",function(e){
e.preventDefault(),
$("#header-mobile").removeClass("blue"),
$(".mobile-filter__footer-popular-btn").removeClass("active"),
$("#filter-aside-mobile-category-popular").removeClass("active")
})
и кстати с пассивным вью, который обновляеца по модели, а это вообще божественный паттерн для веб мартышек
jsx сам по себе не имеет статических проверок, html имеет точно такие же внешние анализаторы
у реакта не пасивное вью которое обновляется по модели
и реакт не реактивный
Разумеется, шаблонизатор:
>jsx сам по себе не имеет статических проверок,
Разумеется, имеет
>у реакта не пасивное вью которое обновляется по модели
Разумеется, пассивное: достаточно установить стейт модели, и оно обновится
https://thomasbandt.com/upload/mvu.png
>и реакт не реактивный
как скажешь
но ведь так искренне считают 90% разрабов на реакте
какой пиздец (((
и если бы в дискуссии оказалось что это не так, мое самомнение обрушилось бы и я бы загрустил
их не так и много
JSX не шаблонизатор потому что результатом его развертывания не является верстка. В реакте есть две фазы - рендер и коммит. Во время фазы рендера вызываются все эти jsx дрисни, транспилируются в React.createElement(...) и потом эти React.createElement разворачиваются в абстрактное дерево, изменения в котором высираются в DOM путем его мутации
То есть jsx не шаблонизатор потому что:
1) реакт не рендерит html, он использует апи браузера для мутаций DOM
2) при это jsx разворачивается не в html и даже не в вышеописанную js парашу и даже не в какую-то абстрактную хуйню а транспилируется в вызовы api реакта
Нет, не имеет. Тебе нужно устанавливать валидаторы которые ты ставишь с бабелем или еще какой-то парашей. Точно так же ты можешь в бабель поставить валидаторы html
Ты забыл уточнить что менять модель можно не как угодно а исключительно с помощю API реакта потому что вью должен попросить реакт зашедулить апдейт самого себя
Есть стейт системы, который не зависит от view. И есть view, которое его отражает.
Любые изменения во вью должны вноситься через стейт.
Ты не можешь поменять вью не трогая модель но ты очень просто можешь поменять модель и оставить вью неактуальным
В программировании под термином "зависимость" обычно подразумевают наличие знания или ссылки на что либо.
"A зависит B" значит у A есть знание о B или ссылка на B.
У стейта нету никакого знания о вью, но разумеется его рисуют в рамках жизненного цикла.
Точно так же как HTML страница не имеет зависимости на мою ОС (в ней нет кода, специфичного для моей ОС) но страница сущестует только потому, что ОС ее рисует (по требованию браузера).
Жизненный цикл страницы (обновления её итд) так же зависят от ОС, а еще от моей клавиатуры.
>Ты не можешь поменять вью не трогая модель
Я могу выкинуть view, и написать другой view для той же самой модели.
Если же ты имеешь ввиду, что вся работа с вью идет через модель -- то да, это так. Именно потому вью и пассивен, хотя в данном случае у нас во вью инкорпорирован контроллер, что несколько смешивает понятия (в совсем классическом пассивном вью контроллер должен быть отдельно)
Однако я не могу по онклику на кнопку поменять напрямую другую кнопку. Я должен сообщить об этом модели, а дальше система отрендерит мои изменения этой самой модели
Это, в целом, неплохой паттерн, позволяющий не писать говно типа "при нажатии на кнопку A задизейблить кнопку X"
Это неочевидно на простых примерах но при достаточно сложной логики и вью и модель(если это именно модель UI) становятся обязаны знать о жизненном цикле реакта
Аналогично все делают бизнес-логику на чем угодно кроме реакта, но вся ui логика делается в реакте. И любая библиотека реализующая модель имеет адаптер к реакту
Если бы такое понятие было, то разуеется лучше было бы испольщовать модель.
> бизнес-логику
Бизнес логику лучше отделять от UI фреймворков, это правда.
Когда мы говорим "модель", мы на самом деле имеем ввиду "модель представления". В крупных проектах она может отличаться от настоящих бизнес моделей (см MVVM)
Внешне реакт действительно похож на тонкий слой вью максимально приближенный к вёрстке, но в действительности это ожиревшая хуйня в которой jsx - не html, обработчики событий элемента не привязаны к этому элементу, фаза рендера не отдает html и в случае порталов иерархия реактовых компонентов сильно отличается от иерархии DOM компонентов
Любой компилятор JSX отловит ошибку с незакрытым тегом.
Формально говоря ты прав: например ни джава, ни jsx не имеют средств для статической валидации кода. Такие средства имеют их компиляторы.
Однако же мы говорим "в джаве код компилируется, и это дает некоторую проверку по сравнению с бат файлом, где об ошибке можно узнать только в рантайме"
О JSX можно так сказать
Результатом его работы является JS код, который после всего этого и строит DOM страницы. Это -- деталь реализации.
Шаблонизаторы позволяют писать HTML код встраивая в него какие-то переменные, и получать в итоге HTML страницу.
Некоторые шаблонизаторы генерируют поток байт, который затем превращется в символы HTML.
Шаблнизатор JSP (в джаве) генерирует Java код.
В ASP.NET код получается на .NET.
Тем не менее, всё это шаблонизаторы.
Если он как реакт отдает скрипты то это уже какой-то рантайм
Можно написать шаблонизатор который будет выдавать вёрстку из jsx
Но в случае с реактом эта верстка сама по себе не имеет ценности, имеют ценности скрипты которые будут делать новую верстку и контролировать жизненный цикл
JSP не шаблонизатор, потому что разворачивается код на java.
jinja не шаблонизатор, потому что разворачивается в код на python.