Две базовые идеи в Redux
Прежде, чем начать изучение библиотеки Redux, давайте познакомимся с двумя ее базовыми идеями. Первую идею, касающуюся управления состоянием, мы рассмотрим на примере обычного счетчика на стейте в React:
function Counter() {
// State
const [count, setCount] = useState(0)
// Action:
function clickHandler() {
setCount(count + 1)
}
// View:
return (
<div>
<span>{count}</span>
<button onClick={clickHandler}>+</button>
</div>
)
}
В этом коде мы видим стейт
для переменной count
- это
источник истины для счетчика. Затем мы видим
действие (action) - событие,
которое по клику пользователя вызывает
обновление стейта. И, наконец,
представление (view),
с помощью которого мы отображаем
пользовательский интерфейс.
Таким образом схема довольно проста:
кнопка нажимается - стейт count
(State)
по нажатию (Action) изменяется, следовательно
изменяется представление (View) - в нашем случае
это число на экране.
Однако, все будет сложнее, если у нас множество компонентов, которые должны использовать один и тот же стейт. Можно, конечно, к примеру поднять состояние до родительских компонентов, но такое решение не всегда может избавить от проблемы. Redux в этом случае предлагает нам создать одно место в приложении, которое бы содержало глобальное состояние и определенные шаблоны поведения при обновлении этого состояния. Именно в этом и заключается первая базовая идея (!).
Вторая идея связана с иммутабельностью, то есть с неизменностью данных. Вы, конечно, помните из JavaScript, что массивы и объекты можно изменять. Изменение данных напрямую в Redux, как и в других фреймворках считается дурным тоном и может приводить к непредсказуемым последствиям. Поэтому в Redux наши первоначальные объекты и массивы должны оставаться иммутабельными, а изменять мы можем только их копии.
Расскажите, в чем заключается первая базовая идея Redux.
Расскажите, в чем заключается вторая базовая идея Redux.