ReactJS - Redux: руковод BEGINNERS

Здравствуйте, стремящийся разработчик! Я рад быть вашим проводником в этом захватывающем путешествии в мир ReactJS и Redux. Кто-то, кто уже много лет teaches компьютерные науки, видел countless студентов, зажигающихся, когда они finally понять эти концепции. Так что погружаемся и создаем немного магии!

ReactJS - Redux

Что такое Redux?

Прежде чем мы перейдем к коду, давайте поймем, что такое Redux. Представьте, что вы организовываете большую вечеринку (это ваше приложение), и вам нужно отслеживать всех гостей, еду и музыку (это состояние вашего приложения). Redux похож на super-эффективного организатора вечеринок, который держит все в одном central месте.

Redux - это библиотека управления состоянием, которая помогает вам эффективнее управлять данными в ваших приложениях React. Она особенно полезна для больших приложений, где передача данных между компонентами может become сложной.

Основные концепции Redux

Давайте разберем основные концепции Redux:

1. Store

Store - это как большой контейнер, который хранит все состояние вашего приложения. Это единственный источник истины для данных вашего приложения.

2. Actions

Actions - это как сообщения, которые говорят store, что произошло в вашем приложении. Они являются обычными объектами JavaScript, которые должны иметь property type.

3. Reducers

Reducers - это функции, которые specify, как состояние приложения изменяется в ответ на действия. Они принимают текущее состояние и действие в качестве аргументов и возвращают новое состояние.

4. Dispatch

Dispatch - это метод, который отправляет действия в store для обновления состояния.

Теперь давайте посмотрим на эти концепции в действии с примерами кода!

Настройка Redux

Сначала нам нужно установить Redux и React-Redux:

npm install redux react-redux

Теперь создадим простое приложение-счетчик, чтобы продемонстрировать, как работает Redux.

Создание store

import { createStore } from 'redux';

// Это наш reducer
const counterReducer = (state = 0, action) => {
switch (action.type) {
case 'INCREMENT':
return state + 1;
case 'DECREMENT':
return state - 1;
default:
return state;
}
};

// Создаем store
const store = createStore(counterReducer);

В этом примере мы создаем store с простым reducer-счетчиком. Reducer слушает 'INCREMENT' и 'DECREMENT' действия и обновляет состояние соответственно.

Определение действий

// Создатели действий
const increment = () => ({ type: 'INCREMENT' });
const decrement = () => ({ type: 'DECREMENT' });

Это наши создатели действий. Они возвращают объекты действий, на которые будет реагировать наш reducer.

Использование компонента Provider

Компонент Provider делает store Redux доступным для любых вложенных компонентов, которые нуждаются в доступе к store.

import React from 'react';
import { Provider } from 'react-redux';
import { createStore } from 'redux';
import counterReducer from './reducers';
import App from './App';

const store = createStore(counterReducer);

const Root = () => (
<Provider store={store}>
<App />
</Provider>
);

export default Root;

Этот код оборачивает наш main App компонент в Provider, давая всем компонентам доступ к store.

Подключение компонентов к Redux

Теперь создадим компонент Counter, который использует наш Redux store:

import React from 'react';
import { connect } from 'react-redux';
import { increment, decrement } from './actions';

const Counter = ({ count, increment, decrement }) => (
<div>
<h2>Счетчик: {count}</h2>
<button onClick={increment}>+</button>
<button onClick={decrement}>-</button>
</div>
);

const mapStateToProps = (state) => ({
count: state,
});

const mapDispatchToProps = {
increment,
decrement,
};

export default connect(mapStateToProps, mapDispatchToProps)(Counter);

Давайте разберем это:

  1. Мы импортируем connect из react-redux, что позволяет нам подключить наш компонент к store Redux.
  2. mapStateToProps говорит Redux, как mapStateToProps состояние в пропсы нашего компонента.
  3. mapDispatchToProps позволяет нам mapStateToProps наши создатели действий в пропсы.
  4. connect оборачивает наш компонент, inject-ая состояние и создатели действий в пропсы.

Методы API Redux

Вот таблица некоторых важных методов API Redux:

Метод Описание
createStore(reducer, [preloadedState], [enhancer]) Создает Redux store
combineReducers(reducers) Объединяет несколько reducers в одну функцию
applyMiddleware(...middlewares) Применяет middleware к методу dispatch store
bindActionCreators(actionCreators, dispatch) Преобразует объект, значения которого являются создателями действий, в объект с теми же ключами, но с каждым создателем действий, обернутым в вызов dispatch

Заключение

И вот мы и здесь! Мы рассмотрели основы Redux, от понимания его ключевых концепций до его реализации в приложении React. Помните, что Redux может показаться немного сложным сначала, но это как учиться ездить на велосипеде - как только вы научитесь, вы будете удивляться, как вы обходились без него!

Пока вы продолжаете свое путешествие, вы откроете для себя более продвинутые функции Redux, такие как middleware и асинхронные действия. Но пока, похлопайте себя по спине - вы сделали свои первые шаги в более large мир управления состоянием!

Продолжайте программировать, продолжайте учиться и, самое главное, продолжайте наслаждаться! До свидания, счастливого использования Redux!

Credits: Image by storyset