createStore()
do Redux. Para nos permitir combinar vários redutores juntos, o Redux fornece o método combineReducers()
. Esse método aceita um objeto como um argumento no qual você define propriedades que associam chaves a funções específicas do redutor. O nome que você dá às chaves será usado pelo Redux como o nome do pedaço de estado associado. Normalmente, é uma boa prática criar um redutor para cada estado de aplicativo quando eles são distintos ou exclusivos de alguma forma. Por exemplo, em um aplicativo de anotações com autenticação de usuário, um redutor pode manipular a autenticação enquanto outro manipula o texto e as anotações que o usuário está enviando. Para tal aplicação, podemos escrever o método combineReducers()
desta forma: const rootReducer = Redux.combineReducers ({Agora, as
auth: authenticationReducer,
notas: notesReducer
});
notes
principais conterão todo o estado associado às nossas anotações e notesReducer
manipuladas pelo nosso notesReducer
. É assim que vários redutores podem ser compostos para gerenciar um estado de aplicativo mais complexo. Neste exemplo, o estado mantido no repositório do Redux seria, então, um único objeto contendo as propriedades auth
e notes
. counterReducer()
e authReducer()
fornecidas no editor de código, junto com um repositório Redux. Termine de escrever a função rootReducer()
usando o método Redux.combineReducers()
. Atribua counterReducer
a uma chave chamada count
e authReducer
a uma chave chamada auth
. counterReducer
deve incrementar e decrementar o state
.
testString: 'assert((function() { const initalState = store.getState().count; store.dispatch({type: INCREMENT}); store.dispatch({type: INCREMENT}); const firstState = store.getState().count; store.dispatch({type: DECREMENT}); const secondState = store.getState().count; return firstState === initalState + 2 && secondState === firstState - 1 })(), "The counterReducer
should increment and decrement the state
.");'
- text: O authReducer
deve alternar o state
de authenticated
entre true
e false
.
testString: 'assert((function() { store.dispatch({type: LOGIN}); const loggedIn = store.getState().auth.authenticated; store.dispatch({type: LOGOUT}); const loggedOut = store.getState().auth.authenticated; return loggedIn === true && loggedOut === false })(), "The authReducer
should toggle the state
of authenticated
between true
and false
.");'
- text: 'O state
loja deve ter duas chaves: count
, que contém um número, e auth
, que contém um objeto. O objeto auth
deve ter uma propriedade de authenticated
, que contém um booleano.'
testString: 'assert((function() { const state = store.getState(); return typeof state.auth === "object" && typeof state.auth.authenticated === "boolean" && typeof state.count === "number" })(), "The store state
should have two keys: count
, which holds a number, and auth
, which holds an object. The auth
object should have a property of authenticated
, which holds a boolean.");'
- text: O rootReducer
deve ser uma função que combina o counterReducer
e o authReducer
.
testString: 'getUserInput => assert((function() { const noWhiteSpace = getUserInput("index").replace(/\s/g,""); return typeof rootReducer === "function" && noWhiteSpace.includes("Redux.combineReducers") })(), "The rootReducer
should be a function that combines the counterReducer
and the authReducer
.");'
```