Wyszukaj / o blogu

Redux: wprowadzenie

Opublikowano ptk 06 listopada 2020 w redux • 3 min read

redux-logo

Redux - kontener stanu

Redux jest biblioteką do zarządzania stanem dla całej aplikacji ("kontenerem stanu") w sposób ponadkomponentowy (współpracuje min. z Reactem oraz Angularem)

Istotnym znaczeniem Reduxa jest możliwość jasnego zdeklarowania sposoby zmiany globalnego stanu (store) [React sam w sobie nie zareagowałby na zmianę zmiennej].

Poniżej opiszę parę kluczowych pojęć do pracy z Reduxem


Store - miejsce przechowywania stanu

Store (przechowalnia) - jest obiektem przechowującym stan aplikacji i jest tworzony przez reduktora/reducera

Store posiada metodę getState które zwraca aktualną wartość stanu

import { configureStore } from '@reduxjs/toolkit'

const store = configureStore({ reducer: counterReducer })

console.log(store.getState())
// {value: 0}

Dispatch - wywołanie wydarzenia

Metoda należąca do obiektu kontenera stanu - store, która jest odpowiedzialna za aktualizację stanu -> Należy odwołać się do store.dispatch() i przekazać do niej obiekt akcji (przedstawiony poniżej) - wywoła akcję reduktora


Akcje - zmiany stanu aplikacji

obiekt JS, który posiada pole typu type -> zawiera opis danej akcji (event), która zachodzi w ramach aplikacji. Do pola type powinien być przypisany string opisujący/nazywający dane wydarzenie. Zwyczajowo stosuje się wzór "domain/eventName" ("kategoria/konkretneWydarzenieKtóreZachodzi") np. "todos/todoAdded". Do pola o nazwie payload (przyjęta konwencja/ faktycznie nazwa może być dowolna)

(źródło przykładów Redux Essentials, Part 1: Redux Overview and Concepts)

const addTodoAction = {
  type: 'todos/todoAdded',
  payload: 'Buy milk'
}

Kreator akcji - jest funkcją która tworzy i zwraca obiekt akcji (zwalnia z każdorazowego pisania obiektu akcji)

const addTodo = text => {
  return {
    type: 'todos/todoAdded',
    payload: text
  }
}

Reducer/Reduktor: (state, action) => newState

Funkcja przyjmująca stan aplikacji oraz akcję - na tej podstawie wytwarza nowy stan. Reduktor Reduxa jest porównywany do event listenera, który zajmuje się wydarzeniami w zależności od wykonywanego zdarzenia.

Zasady reduktora:

  • oblicza nowy stan na podstawie akcji oraz stanu
  • nie modyfikuje stanu a kopiuje stan pracuje na tej kopiowania
  • nie zajmuje się logiką asynchroniczną

Zwyczajowe zasady pracy reduktora - sprawdza czy reduktor jest powiązany ze zdażeniem - jeśli tak to tworzy kopię stanu i zmienia kopię w zależności od nowych wartości a następnie zwraca zmienioną kopię - w przeciwnym przypadku zwraca stan niezmieniony

  const initialState = { value: 0 }

  function counterReducer(state = initialState, action) {
    // Check to see if the reducer cares about this action
    if (action.type === 'counter/increment') {
      // If so, make a copy of `state`
      return {
        ...state,
        // and update the copy with the new value
        value: state.value + 1
      }
    }
    // otherwise return the existing state unchanged
    return state
  }

Selectors - selektor części informacji

funkcje, które pozwalają na pozyskanie części informacji przechowywanych przez kontener (store)

const selectCounterValue = state => state.value

const currentValue = selectCounterValue(store.getState())
console.log(currentValue)

Connect - łącznik Reacta z Reduxem

Funkcja łącząca Redux z Reactem więcej na ten temat tutaj: connect() - API Reference lub w dalszych postach.


Redux Toolkit - zestaw narzędzi do stworzenia środowiska Reduxowego

więcej informacji tutaj: Redux Toolkit lub w dalszych postach


Grafika przedstawiająca relacje pomiędzy opisanymi powyżej częściami środowiska Redux

redux-relacje grafika


Redux DevTools

Narzędzie przeglądarki do pracy z Reduxem dla Chroma oraz FireFoxa

Parę obrazów z użycia narzędzia oraz ich, krótki opis

redux-trace

Zakładka action - ukazuje rodzaj aktualizacji State zachowanie się stanu oraz Diff wskazuje na różnicę jaka się wykonała

redux-trace

Redux trace - ukazuje w którym miejscu kod, wysyła dane żądanie (ma wpływ na zmianę stanu)


Więcej na powyższy temat: :

Redux-dokumentacja-tutorial

Redux Essentials, Part 1: Redux Overview and Concepts

React + Redux — kurs: wprowadzenie i podstawy

7 steps to understand React Redux

Redux VS React Context: Which one should you choose?

React Redux Tutorial for Beginners: The Complete Guide (2020)

YT

Podstawy Redux -> Artur Chmaro

Kurs Redux - Wprowadzenie -> Edugrafia

Architektura Flux - Redux od podstaw #1 -> AlgoSmart - Marcin Czarkowski

Czym jest Redux? - Redux od podstaw #2 -> AlgoSmart - Marcin Czarkowski