Koja je razlika između reduktora i međuprograma u Reduxu?

Nov 10, 2025

Bok tamo! Kao dobavljača reduktora, često me pitaju o razlici između reduktora i međuprograma u Reduxu. To je često pitanje, posebno za one koji su novi u svijetu Reduxa i upravljanja stanjem u React aplikacijama. Dakle, zaronimo u to i raščlanimo to na način koji je lako razumjeti.

Što je reduktor?

Kao prvo, razgovarajmo o reduktorima. U Reduxu, reduktor je čista funkcija koja uzima trenutno stanje i akciju kao argumente i vraća novo stanje. Zvuči jednostavno, zar ne? Pa, na neki način i jest, ali je i super moćan.

Recimo da gradite aplikaciju s popisom obaveza. Vaše stanje može biti niz stavki koje morate učiniti, a svaka radnja može biti nešto poput "dodajte novu obavezu", "označite obavezu kao dovršenu" ili "izbrišite obavezu". Posao reduktora je rukovanje ovim radnjama i ažuriranje stanja u skladu s tim.

Evo jednostavnog primjera reduktora za našu aplikaciju popisa obaveza:

const initialState = { todos: [] }; const todoReducer = (state = initialState, action) => { switch (action.type) { case 'ADD_TODO': return { ...state, todos: [...state.todos, action.payload] }; case 'DELETE_TODO': return { ...state, todos: state.todos.filter(todo => todo.id!== action.payload) }; zadano: stanje povrata; } };

U ovom primjeru, kada jeADD_TODOradnja je otpremljena, reduktor preuzima trenutno stanje, širi ga, a zatim dodaje novu stavku za - učiniti usveniz. Kada jeIZBRIŠI_SVEradnja otpremljena, filtrira stavku za učiniti s navedenim ID-om.

Titanium Gr7 ReducerZirconium Reducer

Kao dobavljač reduktora, nudimo širok raspon visokokvalitetnih reduktora, poputReduktor od titana Gr7iCirkonijski reduktor. Ovi reduktori dizajnirani su za učinkovito i pouzdano rješavanje složenih zadataka upravljanja stanjem.

Što je Middleware?

Sada, prijeđimo na međuprogram. Middleware u Reduxu je način presretanja radnji prije nego što dođu do reduktora. Može se koristiti za razne svrhe, kao što je bilježenje, rukovanje asinkronim operacijama ili dodavanje dodatnih funkcija vašoj aplikaciji.

Jedan od najčešćih slučajeva upotrebe međusoftvera je rukovanje asinkronim radnjama, poput upućivanja API poziva. U tradicionalnoj postavci Reduxa, radnje su sinkrone, što znači da se događaju odmah. Ali kada trebate uputiti API poziv, morate čekati odgovor. Tu na scenu dolazi međuprogram.

Popularan međuprogram za rukovanje asinkronim radnjama je Redux Thunk. Uz Redux Thunk, možete slati funkcije umjesto običnih objekata kao akcije. Te funkcije tada mogu izvoditi asinkrone operacije i slati druge radnje kada završe.

Evo primjera korištenja Redux Thunka za upućivanje API poziva:

import { createStore, applyMiddleware } from'redux'; import thunk from'redux - thunk'; const initialState = { podaci: null, učitavanje: false, error: null }; const reduktor = (stanje = početno stanje, akcija) => { prekidač (akcija.tip) { slučaj 'FETCH_DATA_REQUEST': return { ...stanje, učitavanje: istina, greška: null }; case 'FETCH_DATA_SUCCESS': return { ...state, loading: false, data: action.payload }; case 'FETCH_DATA_FAILURE': return { ...state, loading: false, error: action.payload }; zadano: stanje povrata; } }; const store = createStore(reducer, applyMiddleware(thunk)); const fetchData = () => { return async (dispatch) => { dispatch({ type: 'FETCH_DATA_REQUEST' }); pokušaj { const response = await fetch('https://api.example.com/data'); const podaci = čekaj odgovor.json(); dispatch({ type: 'FETCH_DATA_SUCCESS', payload: data }); } catch (greška) { dispatch({ type: 'FETCH_DATA_FAILURE', payload: error.message }); } }; };

U ovom primjeru,dohvatiPodatkefunkcija je thunk radnja. Prvo šalje aFETCH_DATA_REQUESTradnju koja označava da se podaci dohvaćaju. Zatim upućuje API poziv. Ako je poziv uspješan, šalje aFETCH_DATA_SUCCESSakcija s podacima. Ako postoji greška, šalje aFETCH_DATA_FAILUREradnja s porukom o pogrešci.

Ključne razlike

Dakle, koje su ključne razlike između reduktora i međuprograma?

  1. Funkcionalnost: Glavni posao reduktora je ažuriranje stanja na temelju radnji. To je čista funkcija koja preuzima trenutno stanje i akciju i vraća novo stanje. Middleware se, s druge strane, koristi za presretanje radnji i dodavanje dodatnih funkcija, poput rukovanja asinkronim operacijama ili zapisivanja.
  2. Vrijeme: Reduktori se pozivaju nakon što je akcija otpremljena i prije ažuriranja stanja. Middleware se poziva prije nego što radnja stigne do reduktora, dopuštajući mu da modificira radnju ili izvrši druge zadatke.
  3. Vrsta funkcije: Reduktori su čiste funkcije, što znači da uvijek vraćaju isti izlaz za isti ulaz i nemaju nikakvih nuspojava. Middleware može biti nečista funkcija, budući da može izvesti nuspojave poput upućivanja API poziva ili zapisivanja.

Zašto su oboje važni

I reduktori i međuprogrami bitni su dijelovi Redux aplikacije. Reduktori održavaju vaše upravljanje stanjem organiziranim i predvidljivim. Oni osiguravaju da se stanje vaše aplikacije mijenja na kontroliran način. Middleware, s druge strane, dodaje fleksibilnost i dodatnu funkcionalnost vašoj aplikaciji. Omogućuje vam rukovanje složenim scenarijima, poput asinkronih operacija, bez pretrpavanja reduktora.

Kao dobavljač reduktora, razumijemo važnost posjedovanja reduktora visoke kvalitete koji dobro funkcioniraju s međuprogramom. NašeReduktor od titana Gr7iCirkonijski reduktordizajnirani su da budu kompatibilni sa širokim rasponom međuprograma, osiguravajući nesmetan rad vaše aplikacije.

Zaključak

Zaključno, reduktori i međuprogrami u Reduxu služe različitim, ali komplementarnim svrhama. Reduktori su odgovorni za ažuriranje stanja, dok se međuprogram koristi za presretanje radnji i dodavanje dodatnih funkcija. Razumijevanje razlika između njih ključno je za izgradnju robusnih i skalabilnih React aplikacija.

Ako ste na tržištu visokokvalitetnih reduktora, voljeli bismo čuti vaše mišljenje. Bilo da radite na malom projektu ili aplikaciji velikih razmjera, naši reduktori su dizajnirani da zadovolje vaše potrebe. Kontaktirajte nas kako bismo započeli raspravu o nabavi i pronašli savršen reduktor za vaš projekt.

Reference

  • Redux službena dokumentacija
  • Reagirajte na službenu dokumentaciju
  • Redux Thunk GitHub repozitorij