Управление состоянием в React с помощью MobX 2023
Согласно документации,
MobX - это "проверенная в боях" библиотека, которая делает управление состоянием простым и масштабируемым за счёт функционально-реактивного программирования (TFRP).
Одним из наиболее часто задаваемых вопросов разработчиками при создании современных приложений на React является управление состоянием. В этом руководстве вы узнаете, как использовать MobX в качестве библиотеки управления состоянием для React-приложений. Мы будем использовать её для управления состоянием, что поможет нам понять концепцию и рекомендации по использованию MobX.
Что такое MobX?
Как и другие подобные библиотеки (например, Redux, Recoil, Hook states), MobX позволяет управлять состоянием вашего приложения, но она отличается простотой и масштабируемостью.
Mobx различает следующие концепции:
- State (состояние)
- Actions (действия)
- Derivations (производные)
State State - это данные, которые управляют вашими приложениями. Они содержат различные типы данных, начиная от массивов, строк, чисел и объектов, с которыми MobX позволяет вам работать. Всё, что вам нужно сделать, это убедиться, что все свойства, которые вы хотите изменить, доступны для наблюдения, чтобы MobX мог их отслеживать. Ниже приведён простой пример:
React-компонент TimeView, обёрнутый вокруг observer , автоматически обнаружит, что рендеринг зависит от timer.secondsPassed , даже если связь явно не определена.
Каждое событие (onClick/setInterval) вызывает действие (MyTimer.increase/MyTimer.reset), которое обновляет состояние observable (MyTimer.secondsPassed). Изменения в нём точно распространяются на все вычисления и эффекты (timeView), которые зависят от внесённых правок.
Action Если state - это ваши данные, то action - это любой блок кода, который может изменять такие данные: пользовательские события, внутренние данные и т.д. Action похоже на человека, который изменяет данные в ячейке электронной таблицы. В приведённом выше коде Timer, мы можем видеть методы increase и reset, которые изменяют значение secondsPassed. Actions помогают вам структурировать ваш блок кода и предотвращают постоянное изменение состояния, когда в этом нет необходимости. Методы, которые изменяют состояние, называются actions в MobX.
Derivations Всё, что получено из состояния, известно как derivation (производная). Оно существует в разных формах, но мы рассмотрим именно эти виды производных MobX:
- Computed Values
- Reactions
Computed Values Это значения, которые могут быть получены из состояния с помощью чистой функции. Они будут автоматически обновляться MobX, а также приостанавливаться, когда не используются. Ниже приведён пример такого значения:
Reactions Reactions (реакции) подобны computed values: они реагируют на изменения состояния, но вместо этого вызывают побочные эффекты. В React вы можете превратить функциональные компоненты без состояния в реактивные компоненты, просто добавив функцию наблюдателя. Observer преобразует компоненты функции React в вывод данных, которые они отображают. Ниже приведён пример того, как можно использовать функцию наблюдателя:
Пользовательские реакции могут быть созданы с помощью autorun, reaction или when.
MobX можно установить с помощью любого менеджера пакетов, такого как npm, используя команду npm install -- save mobx.
Почему вам следует ознакомиться с MobX?
Основная цель MobX - улучшить управление состояниями для разработчиков и создать более простой способ управления состояниями приложений Javascript с меньшим количеством кода и шаблонов. MobX использует наблюдаемые данные, которые помогают автоматически отслеживать изменения, облегчая жизнь разработчикам.
MobX позволяет вам управлять состоянием вашего приложения вне каких-либо рамок. Это делает код несвязанным, переносимым и легко тестируемым, именно поэтому он называется UNOPINIONATED.
MobX против Redux/Recoil/HookState
В отличие от других менеджеров состояний, таких как Redux и Easy Peasy, MobX использует несколько хранилищ для обработки состояния приложения. Вы можете разделить их, чтобы все состояния приложения были в одном хранилище, как и в Redux.
Одной из главных проблем Redux является количество шаблонного кода, который поставляется вместе с ним, а интеграция с React приводит к избытку шаблонов, которые разработчики находят непривлекательными. MobX практически не требует шаблонного кода и не требует каких-либо специальных инструментов, что делает его настройку простой и непринужденной.
Redux более самоуверен, что приводит к чистым функциям, но MobX выигрывает из-за своей неоспоримой особенности, когда дело доходит до масштабируемости.
Когда использовать MobX?
Хотя некоторые разработчики, как правило, путаются в том, когда использовать ту или иную библиотеку управления состоянием для того или иного проекта, давайте разберём этот аспект. Если вы хотите написать минимальный код, практически без шаблонов, загораживающих ваш обзор, или если вы пытаетесь обновить поле записи без каких-либо специальных инструментов, то MobX - это то, чем вам следует воспользоваться.
Создание React-приложения с помощью MobX.
Мы создадим приложение Todo для ведения заметок и украсим его с помощью библиотеки Framer-Motion. Мы будем использовать Mobx в качестве менеджера состояния в нашем приложении Todo.
Сначала мы настроим нашу среду, создав наше приложение react с помощью следующей команды в вашем терминале.
Затем мы меняем наш каталог и устанавливаем необходимые зависимости перед созданием наших компонентов и состояния:
Создание компонента Store
Мы создадим компонент store.ts в корневой папке, и используем Mobx с контекстным API React, чтобы сделать наш магазин доступным для всех компонентов.
Создание компонента TodoStore
TodoStore.ts содержит наш компонент состояния. Сначала мы создаем функцию TodoStore, которая возвращает makeAutoObservable (из MobX) со списком с заголовком и идентификатором.
Создание компонента TodoForm
Нам нужно будет реализовать компонент TodoForm.tsx для создания Todo-приложения.
Создание компонента TodoList
Чтобы перечислить все наши входные задачи, нам нужно будет создать компонент ToDoList.tsx:
Создание компонента TodoDetails
Файл TodoDetails.tsx содержит наши компоненты TodoForm и ToDoList.
Создание компонента Main.css
Стиль нашего приложения будет добавлен при использовании следующего css-кода:
Добавление Framer-Motion
Добавление библиотеки Framer-Motion (для анимации, управляемой компонентами движения) в App.tsx нуждается в этом коде:
Заключение
В этой статье мы провели экскурсию по MobX как библиотеке управления состоянием React. Мы также узнали, как использовать реактивное состояние MobX для управления состоянием приложения, что было довольно интересно. Мы интегрировали его с нашим кодом и Framer-Motion для анимации.
Ресурсы
Статья была взята из этого источника: