ReactJS - Redux: руковод BEGINNERS
Здравствуйте, стремящийся разработчик! Я рад быть вашим проводником в этом захватывающем путешествии в мир ReactJS и Redux. Кто-то, кто уже много лет teaches компьютерные науки, видел countless студентов, зажигающихся, когда они finally понять эти концепции. Так что погружаемся и создаем немного магии!
Что такое 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);
Давайте разберем это:
- Мы импортируем
connect
из react-redux, что позволяет нам подключить наш компонент к store Redux. -
mapStateToProps
говорит Redux, как mapStateToProps состояние в пропсы нашего компонента. -
mapDispatchToProps
позволяет нам mapStateToProps наши создатели действий в пропсы. -
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