Please enable JavaScript.
Coggle requires JavaScript to display documents.
Frontend (client side) - Coggle Diagram
Frontend (client side)
Менеджер состояния
-
Реализации
Redux
-
Минусы
Каждый mounted connected компонент сравнивает ссылки на наблюдаемую часть store
при любом изменении store
-
Нужно решение для иммутабельного обновления вложенных структур (Immer, Immutable или Ramda)
-
-
-
-
-
Middleware
При подключении redux-thunk в dispatch помимо action можно передать thunk: (dispatch, getState) => { dispatch(...) }
-
-
MobX
-
Под капотом
Отписка, если observable
не заинтересует наблюдателя при очередном проходе
-
-
computed
get
поле
-
-
Если нужны параметры, есть computedFn
Реакция
-
Не должна менять другие observable
, нужно использовать computed
-
-
-
Redux Toolkit
Решение, устраняющее большинство минусов Redux
Slice
const { actions, reducer } = createSlice({ initialState, reducers })
-
-
-
-
-
createApi - slice для удобной работы с сервером.
Генерирует хук, возвращающий { data, error, isLoading }
Flux-архитектура
Store
, обновляемый только посредством actions
(изменения легко отслеживать)
-
Поток данных одно-направлен, логика изменений лежит не в action, а в Store
Использование
-
Не стоит использовать без необходимости, если компоненты, использующие общее состояние, расположены близко
Persist
Синхронизация хранилища с localStorage:
гидратация при обновлении, дегидратация при инициализации
-
-
Верстка
Способы стилизации
CSS
-
Не подходит для динамических стилей (н-р, left: ...px
)
CSS-in-JS
-
-
-
-
-
Styled components для создания стилизованных html-компонентов (ИМХО, отвлекают от логических компонентов)
-
HTML
Поизционирование дочерних элементов с использованием Flexbox, Grid, Table
-
left, top - смещение относительно обычного расположения
Хорошие практики
Элементы не должны знать о соседях, отступами управляет контейнер
БЭМ
Блок - то, что можно вынести в компонент React/Angular
Элемент - то, что не существует в отрыве от блока
-
CSS-cелекторы
-
-
:not(sel1)
- отрицание
-
sel1, sel2
- или
-
sel1sel2
- и
-
this sel
- потомок
-
this > sel
- прямой потомок
-
this :nth-child(n)
- n-й потомок
-
this :only-child
- единственный потомок
-
this ~ sel2
- сосед
- [attr=value] - по атрибуту
-
Optimistic updates
Обновление UI до подтверждения сервера, откат при получении ошибки
-
В качестве компромисса можно использовать маленький лоадер, блокирующий часть действий
Структура проекта
Модульная
-
-
-
pages - максимально тонкие компоненты, комбинирующие модули
-
Проблемы
Зависимости между соседями внутри слоя из-за небольшого числа слоев (модуль в модуле, утилита в утилите)
-
Feature-sliced
Слои
-
Бизнес-слои
entities - компоненты бизнес-сущностей, могут быть умными (н-р, карточка поста)
features - компоненты бизнес-действий (н-р, лайк, репост)
widgets - блоки, содержащие features и entities (н-р, пост)
Над слоем pages может быть слой взаимодействия страниц - processes (н-р, переход между формами)
-
-
-
-