Hogyan lehet szinkronizálni a Redux Store-t a böngésző lapjain – CloudSavvy IT

Avatar Gadam | 2021.04.08. 48 Views 0 Likes 0 Ratings

48 Views 0 Ratings Rate it

[ad_1]

A Redux logót ábrázoló ábra

A Redux egy kényelmes módszer az összetett webalkalmazások állapotának kezelésére. A Redux áruház azonban nincs szinkronizálva a fülek között, ami néhány kínos helyzethez vezethet. Ha a felhasználó egy lapon kijelentkezik, akkor ideális lenne, ha ez a művelet a többi nyitott fülén is megjelenik.

A lapok közötti szinkronizálást hozzáadhatja a reagál-állapot-szinkron könyvtár. Ez egy köztes szoftvert biztosít, amely automatikusan szinkronizálja az áruházat a fülek között. A kezdeti beállítás után nem kell manuálisan beavatkoznia a szinkronizálási folyamatba.

Áttekintés

A Redux State Sync könyvtár egy Redux köztes szoftvert kínál, amelyet hozzá kell adnia a boltjához. Amikor az áruház megkapja a műveletet, a köztes szoftver ugyanazt a műveletet küldi a webhelyére nyitott bármely más fülön.

Minden fül beállítja a saját üzenetfigyelőjét a bejövő műveletekről szóló értesítések fogadására. Amikor értesíti a hallgatót, elküldi a műveletet a fül tárolójába.

Az üzeneteket a fülek között cserélhetjük a Broadcast Channel API. Ez egy olyan böngészőfunkció, amely lehetővé teszi az azonos eredetű fülek kommunikációját egymással. A fülek „feliratkoznak” a „csatornákra”. A böngésző értesíti őket, amikor egy másik fül üzenetet küld a feliratkozott csatornára.

A Broadcast Channel csak újabb böngészőkben érhető el. A Redux State Sync olyan absztrakciót használ, amely alternatív technológiákra képes visszacsatolni. Ha a Broadcast Channel nem támogatott, akkor az IndexedDB vagy a LocalStorage lesz használva.

A Broadcast Channel használata bizonyos korlátozásokkal sújtja a fülek közötti küldés lehetőségét. A küldött adatokat a böngészőnek támogatnia kell strukturált klón algoritmus. Ide tartoznak a skaláris értékek, tömbök, sima JavaScript objektumok és foltok. A komplex értékek nem kerülnek pontosan átadásra.

Az áruház szinkronizálása

A Redux State Sync használatának megkezdéséhez vegye fel a projektbe az npm-en keresztül:

npm install redux-state-sync

Ezután hozzon létre egy alap boltot. Egy pillanat alatt módosítjuk ezt a kódot a Redux State Sync hozzáadásához.

import {createStore} from "redux";
 
const state = {authenticated: false};
 
const reducer = (state, action) => ({...state, ...action});
 
const store = createStore(reducer, state);

Most egy egyszerű üzletünk van. A fülek közötti szinkronizáláshoz adja hozzá a Redux State Sync köztes szoftvert, és állítson be egy üzenetfigyelőt.

import {createStore, applyMiddleware} from "redux";
import {createStateSyncMiddleware, initMessageListener} from "redux-state-sync";
 
const reduxStateSyncConfig = {};
 
const reducer = (state, action) => ({...state, ...action});
 
const store = createStore(
    reducer,
    state,
    applyMiddleware(createStateSyncMiddleware(reduxStateSyncConfig))
);
 
initMessageListener(store);

Az áruház készen áll a fülek közötti használatra. Nyissa meg webhelyét két fülön. Küldjön műveletet az egyik fülön. Látnia kell, hogy a művelet mindkét üzletben megjelenik, és mindegyikben végrehajtja a megfelelő állapotváltozást. Az Redux DevTools kiterjesztéssel figyelhető a bejövő műveletek és az általuk okozott állapotváltozások.

Az állapotszinkronizáló köztes szoftver a createStateSyncMiddleware() hasznossági függvény. Ez elfogadja a Redux State Sync működésének testreszabásához használt konfigurációs objektumot. Ezt a következő szakaszban vizsgáljuk meg alaposabban.

Az áruház létrehozása után továbbadják neki initMessageListener(). Ez a funkció biztosítja a keresztfüles hallgatás konfigurálását. E hívás nélkül előfordulhat, hogy a fülek nem kapnak új műveleteket, ha az első betöltéskor nem történt művelet.

Használata initMessageListener() nem adja meg a fülének a hozzáférést a másik lapon lévő meglévő áruházhoz. Amikor a felhasználó új lapot nyit meg, akkor alapértelmezés szerint saját friss tárral rendelkezik. Ha azt szeretné, hogy az új lapok állapotát egy nyitott lapról kapják meg, használja a initStateWithPrevTab() funkció helyett.

const store = createStore(reducer, state, applyMiddleware(createStateSyncMiddleware({})));
initStateWithPrevTab(store);

Az áruház állapota lecserélődik a meglévőre, ha rendelkezésre áll még egy nyitott fül.

Testreszabott szinkronizálás

A Redux State Sync számos konfigurációs lehetőséget támogat a szinkronizálás testreszabásához. Íme néhány a leghasznosabb beállítások közül. Mindegyik tulajdonságként van beállítva az átadott konfigurációs objektumban createStateSyncMiddleware().

Műveletek kizárása

Néha olyan műveleteket hajt végre, amelyeket nem szeretne szinkronizálni. Ilyen lehet például egy olyan művelet, amely megjeleníti a modális párbeszédpanelt. Valószínű, hogy nem szeretné, hogy ez a párbeszédpanel megjelenjen összes a felhasználó nyitott lapjai!

A. Használatával kizárhat bizonyos megnevezett műveleteket blacklist választási lehetőség. Adjon meg egy műveletnév tömböt értékként.

const config = {
    blacklist: ["DEMO_ACTION"]
};
 
// ...
 
// This won't be synced to any other tabs
Store.dispatch({type: "DEMO_ACTION"});

Feketelista helyett használhat fehérlistát is. Állítsa be a whitelist config opció csak előre meghatározott műveletek szinkronizálását teszi lehetővé.

A műveletek pontos szűrése

Ha egyik sem blacklist vagy whitelist elegendő ellenőrzést ad, állítsa be a predicate választási lehetőség. Ez elfogad egy olyan funkciót, amelyet a szinkronizálható műveletek szűrésére használnak.

const config = {
    predicate: action => (action.type !== "DEMO_ACTION")
};

A funkció minden alkalommal meghívásra kerül, amikor új művelet érkezik. Paraméterként megkapja a műveletet. A függvénynek vissza kell térnie true vagy false annak jelzése, hogy a műveletet szinkronizálni kell-e más fülekkel. A fenti példa minden műveletet szinkronizál, kivéve DEMO_ACTION.

Broadcast Channel Settings

A Broadcast Channel nevét megváltoztathatja a channel ingatlan. Alapértelmezés szerint redux_state_sync. Ezt általában nem kell megváltoztatnia, kivéve, ha két külön szinkronizálási rutint szeretne.

Beállítással átadhatja a beállításokat a Broadcast Channel absztrakciós könyvtárának broadcastChannelOption. Ennek egy konfigurációs objektumnak kell lennie, amelyet a pubkey/broadcast-channel könyvtár.

Ezzel kényszeríthet egy adott tárolási technológiát. Ebben a példában a szinkronizálás mindig az IndexedDB-n keresztül történik, még akkor is, ha a böngésző natív támogatást nyújt a Broadcast Channels számára.

const config = {
    broadcastChannelOption: {type: "idb"}
};

Integráció a Redux-Persist

Gyakran érdemes használni a Redux State Sync szolgáltatást a Redux Persist programmal együtt. A Redux Persist egy népszerű könyvtár, amely automatikusan továbbra is fennáll a Redux áruház a böngészőben.

A Redux Persist használatakor nem kell használnia a Redux Persist initStateWithPrevTab() funkció. Használat initMessageListener() ehelyett, mivel a kezdeti állapot mindig a Redux Persist által biztosított tartós állapot lesz.

Feketelista Redux Persist műveletek a Redux State Sync konfigurációján belül. Ezeket nem kell szinkronizálni a fülek között. Csak azokat a változásokat kell szinkronizálnia, amelyek ténylegesen befolyásolják az áruházat, és nem az életciklusához kapcsolódó műveleteket.

const config = {
    blacklist: ["persist/PERSIST", "persist/REHYDRATE"]
};

Összegzés

A Redux State Sync segítségével szinkronizálhatja a felhasználói műveleteket a füleken. Az alkalmazások gyakorlatilag határtalanok, és valószínűleg javítják a felhasználói élményt. Amint a felhasználók műveleteket hajtanak végre az Ön webhelyén, azonnal megjelennek a többi megnyitott lapon.

A „klasszikus” használati eset a bejelentkezés és a kijelentkezés eredményeinek szinkronizálása. Vannak más előnyei is, például a bejövő értesítések elérhetővé tétele az összes fül számára, vagy az ügyféloldali beállítások szinkronizálása, például a felhasználó által kiválasztott felhasználói felület téma.

Az tömörített redux-state-sync könyvtár súlya 19KB. Csak néhány extra kódsorból álló beállítás esetén fontolja meg a Redux State Sync hozzáadását a következő projekthez. Lehetővé teszi a fülek összekapcsolását összetartó egésszé, ahelyett, hogy önálló entitásként léteznének.

[ad_2]
Forrás link


48 Views 0 Ratings Rate it