React+hooks+Redux
  • Вступление
  • REACT HOOKS
    • Введение в хуки
    • Основные хуки
      • Хук состояния (useState)
      • Хук эффекта (useEffect)
      • Хук колбека (useCallback)
      • Хук рефа (useRef)
    • Создание собственных хуков
    • Правила использования хуков
    • Полезная информация
      • Хук мемоизированного значения (useMemo)
      • Как закешировать вычисления?
      • Как получить предыдущие пропсы или состояние?
      • Как осуществлять запросы за данными с помощью хуков?
    • Задание React Hooks
  • REDUX
    • Что такое Redux
    • Основы
      • Действия (Actions)
      • Генераторы действий (Action Creators)
      • Редюсеры (Reducers)
      • Хранилище (Store)
      • Получение доступа к actions и state с помощью функции connect()
      • Подключение Redux
    • Что дальше?
      • Асинхронные действия (Async Actions)
      • Использование Redux с React Router
    • Задание Redux
  • FAQ
    • Заключение
Powered by GitBook
On this page

Was this helpful?

  1. REDUX
  2. Основы

Подключение Redux

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

npm install --save redux react-redux

// установка devtools
npm install --save-dev redux-devtools

1. Создаем store с помощью функции createStore :

store.js
import { createStore } from 'redux';
import rootReducer from './root-reducer';

const store = createStore(rootReducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__());

export default store;

2. Для работы store необходимо создать reducer и initialState

root-reducer.js
const initialState = {
  isShowed: true
};
function rootReducer(state = initialState, action) {
  switch (action.type) {
    case "SHOW_OR_HIDE_LOGO":
      return {
        ...state,
        isShowed: !state.isShowed
      };

    default:
      return state;
  }
}

export default rootReducer;

3. Создание списка actions

action-types.js
const actions = {
    SHOW_OR_HIDE_LOGO: "SHOW_OR_HIDE_LOGO",
};

export default actions;

4. Создание генераторов действий

actions.js
import actions from "./action-types";

export function showOrHide(value) {
  return {
    type: actions.SHOW_OR_HIDE_LOGO,
    payload: value
  };
}

5. Подключение store к проекту

index.js
import React from 'react'
import ReactDOM from 'react-dom'

import { Provider } from 'react-redux'
import store from './store'

import App from './App'
import * as serviceWorker from './serviceWorker';
import './index.css';

const rootElement = document.getElementById('root')
ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  rootElement
)

6. Передача генераторов действий и state в компоненты

App.js
import React from "react";
import logo from "./logo.svg";
import "./App.css";

import { connect } from "react-redux";
import { bindActionCreators } from "redux";
import * as actions from "./actions";

const App = props => {
  return (
    <div className="App">
      <header className="App-header">
        {props.isShowed && <img src={logo} className="App-logo" alt="logo" />}
        <button
          className="common-btn"
          onClick={() => props.showOrHide(!props.isShowed)}
        >
          {props.isShowed ? "HIDE" : "SHOW"}
        </button>
      </header>
    </div>
  );
};

const mapDispatchToProps = dispatch => bindActionCreators(actions, dispatch);

const mapStateToProps = state => state;

export default connect(mapStateToProps, mapDispatchToProps)(App);
PreviousПолучение доступа к actions и state с помощью функции connect()NextЧто дальше?

Last updated 5 years ago

Was this helpful?

Redux подключен и функционирует ().

GitHub