Solutie de gestionare a starii foarte simpla si puternica pentru React si Inferno.

(Inferno nu are suport pentru carlige, dar puteti utiliza componenta Abonare.)

Configurati-va magazinele si abonati-va la acestea. Usor ca asta!

Consultati postarea introductiva de pe blog.

npm instalati laco

npm install laco-react sau npm install laco-inferno

rezumat

  • ???? Simplu de utilizat
  • ???? Usor (sub 2 KB minimizat)
  • Support Suport extensie partiala Redux DevTools (deplasare in timp)

Exemplu

import {Magazin} din „laco” import {useStore} din „laco-react” // Crearea unui magazin nou cu o stare initiala {count: 0} const CounterStore = magazin nou ({count: 0}) // Implementarea unor actiuni pentru a actualiza magazinul const increment = () => CounterStore.set (state => ({count: state.count + 1})) const decrement = () => CounterStore.set (state => ({count: state. count – 1})) const Counter = () => {const state = useStore (CounterStore) // Accepta un singur magazin returnat (<div> <butonul onClick = {decrement}> – </button> <span> {state .count} </span> <button onClick = {increment}> + </button> </div>)}

Pentru mai multe exemple verificati urmatoarele sandbox-uri de cod de mai jos sau folderul de exemple.

Codificati cutii de nisip folosind carlige:

  • Todo MVC
  • Contor si comutare

Codificati cutii de nisip folosind recuzita de redare:

  • Todo MVC
  • Contor si comutare

Extensie Redux DevTools

Consultati extensia Redux DevTools.

Verificati postarea mea pe dev.to despre depanare etc.

Calatorie in timp

Doar faceti clic pe pictograma cronometru si veti obtine un glisor cu care va puteti juca. Asta este! 🙂

React Debugger nativ

Consultati React Native Debugger.

Calatorie in timp

Functioneaza asa cum v-ati astepta :)!

API

Magazin (initialState: Object, name ?: String)

// Initializarea unui magazin nou cu o stare initiala si un nume: const NewStore = Store ({count: 0}, ‘Counter’)

Numele este optional si este utilizat pentru a obtine o prezentare generala a actiunii si a relatiei de stocare in Redux DevTools Extension. Numele actiunilor pentru Magazin vor aparea acum ca Counter – $ {actionType} in DevTools Extension unde, ca inainte, a fost afisat doar $ {actionType}.

Store.get ()

// Obtinerea starii magazinului Store.get ()

Returneaza un obiect care ar putea fi ceva de genul {count: 0} urmand exemplul.

Store.set (stare: Functie, informatii ?: Sir)

// Setarea unei stari noi si trecerea unui nume de actiune optional „increment” Store.set (state => {count: state.count + 1}, „increment”)

Store.replace (stare: Functie, informatii ?: Sir)

Imuabilitatea are grija intr-o anumita masura in culise cu operatorul spread cu Store.set (), dar s-ar putea sa doriti mai mult control asupra starii. Puteti face acest lucru folosind Store.replace () astfel:

// Setarea unei stari noi si trecerea unui nume de actiune optional „increment” Store.replace (state => {/ * returneaza starea modificata * /}, „increment”)

Store.setCondition (conditie: Functie)

// Setarea unei conditii pentru a preveni trecerea numarului sub 0 atunci cand `actionType` este` Decrement` CounterStore.

españolas guarras abuelas porno españolas
viejas con jóvenes follando a mi compañera de piso
nenas follando vende a su novia por dinero
porno con argumento viejas anales
corrida en el culo me follo a mi madre
orgasmosxxx porno espania
porno gay violacion follando en el monte
laura marano nude mujeres maduras corriendose
compartiendo novia tetas amaters
maduras follando y corriendose follando con mi amante
madurafollando videos chicas gratis
vidio xxxx amas de casa infieles
tetas en publico le pilla masturbandose
me follo a intercambio amateur
chicas altas follando videos ponos
follando despues de la fiesta porno loco
monica hoyos porno jovencitas muy calientes
pilladas playa putasfollando
maduras follando en español porno libre
come pollas porno caliente

setCondition ((state, actionType) => {if (state.count <0 && actionType === ‘Decrement’) {/ / Returnarea unei valori falsy va impiedica starea sa schimbe returnarea false} // Pentru orice alte `actionTypes`, cum ar fi` SudoDecrement` va schimba starea returnata de stat})

Setarea unei conditii intr-un magazin va face ca fiecare apel Store.set () sa treaca mai intai de conditie.

Store.reset ()

// Reseteaza magazinul la starea initiala Store.reset ()

O buna practica atunci cand testati este sa apelati reset () pe un magazin inainte de a utiliza magazinul intr-un test. Acest lucru are grija de unele cazuri marginale in care ati putea intalni. Motivul pentru aceasta este ca Laco foloseste un obiect global din culise pentru a stoca toate starile magazinelor dvs. intr-un singur obiect mare. Redux functioneaza si pe un singur obiect global care face posibila calatoria in timp.

Store.dispatch (valoare: oricare, informatii: sir)

// Expedierea unei actiuni care nu modifica starea magazinului Store.dispatch (changeLocation (), „Change location”)

S-ar putea sa doriti sa trimiteti o actiune asociata unui anumit magazin, dar nu doriti sa schimbati starea. Actiunea va fi afisata in acest caz sub numele StoreName – Change location.

expediere (valoare: oricare, informatii: sir)

import {dispatch} din „laco” // Expedierea unei actiuni globale care nu modifica nicio expediere de stat (changeLocation (), „Change location”)

Poate doriti sa trimiteti o actiune globala care NU este asociata cu niciun magazin. In acest caz, actiunea va fi afisata doar ca modificare a locatiei.

getGlobalState ()

importati {getGlobalState} din „laco” getGlobalState ()

Returneaza obiectul global care detine fiecare stare – utilizat in cea mai mare parte pentru rehidratare atunci cand se efectueaza redarea de pe server (SSR).

resetGlobalState ()

importati {resetGlobalState} din „laco” resetGlobalState ()

Reseteaza starea globala la un obiect gol.

replaceGlobalState ()

import {replaceGlobalState} din ‘laco’ const newGlobalState = {0: {test: true}} replaceGlobalState (newGlobalState)

Inlocuieste complet starea globala – cea mai mare parte utilizata pentru rehidratare atunci cand se efectueaza redarea de pe server (SSR).

<Abonare />

Recuzita

  • la – Matrice de magazine la care doriti sa va abonati
importati {Abonare} din „laco-react” // sau „laco-inferno” <Abonare la = {[CounterStore]}> {({count}) => (<div> <butonul onClick = {decrement}> – < / button> <span> {count} </span> <button onClick = {increment}> + </button> </div>)} </Subscribe>

Componenta Abonare foloseste noua idee de redare. Articole similare:

  • Componenta Apollo Query
  • Folositi un suport de redare!

useStore ()

import {Magazin} din „laco” import {useStore} din „laco-react” const CounterStore = magazin nou ({count: 0}) const Counter = () => {const state = useStore (CounterStore) // Ia o singura returnare magazin <div> {state.count} </div>}

useStores ()

import {Store} din „laco” import {useStores} din „laco-react” const CounterStore = magazin nou ({count: 0}) const AnotherStore = magazin nou ({test: “hello”}) const Counter = () = > {// Ia o serie de magazine const [counterState, anotherState] = useStores ([CounterStore, AnotherStore]) returneaza <div> {anotherState.test + counterState.count} </div>}

Rehidratare

Atunci cand efectuati redarea pe partea de server (SSR), este important sa pastrati starea de la server la client.

Va rugam sa urmati acest ghid Redux.

Pe server: In loc sa faceti store.getState (), veti folosi doar getGlobalState ().

Pe client: In loc sa faceti createStore (counterApp, preloadedState) puteti sa inlocuiti GlobalState (pre-incarcatState)

Retineti ca incercarea de a face rehidratarea SSR poate introduce injectii JS daca nu o faceti corect.

Ghidul Redux il rezolva facand JSON.stringify (preloadedState) .replace (/ </ g, ‘\\ u003c’). Pentru o alta solutie, uitati-va aici.

Testarea

Testarea cu banda:

import * ca test din „banda” import {CounterStore, increment, decrement} din testul „./CounterStore” („counter”, t => {CounterStore.reset () t.assert (CounterStore.get (). count == = 0) increment () t.assert (CounterStore.get (). Count === 1) decrement () t.assert (CounterStore.get (). Count === 0) t.end ()})

credite

Inspirat puternic de:

  • Nedeclarat
  • Redux