Redux.applyMiddleware()
. Esta declaração é então fornecida como um segundo parâmetro opcional para a função createStore()
. Dê uma olhada no código na parte inferior do editor para ver isso. Em seguida, para criar uma ação assíncrona, você retorna uma função no criador de ações que toma o dispatch
como um argumento. Dentro dessa função, você pode despachar ações e executar solicitações assíncronas. Neste exemplo, uma solicitação assíncrona é simulada com uma chamada setTimeout()
. É comum despachar uma ação antes de iniciar qualquer comportamento assíncrono para que o estado do seu aplicativo saiba que alguns dados estão sendo solicitados (esse estado pode exibir um ícone de carregamento, por exemplo). Em seguida, depois de receber os dados, você despacha outra ação que transporta os dados como uma carga juntamente com informações de que a ação foi concluída. Lembre-se de que você está passando o dispatch
como um parâmetro para esse criador de ações especiais. Isto é o que você usará para despachar suas ações, você simplesmente passa a ação diretamente para despachar e o middleware cuida do resto. handleAsync()
. Dispatch requestingData()
antes do setTimeout()
(a chamada da API simulada). Em seguida, depois de receber os dados (pretendidos), despache a ação receivedData()
, passando esses dados. Agora você sabe como lidar com ações assíncronas no Redux. Tudo o resto continua a se comportar como antes. requestingData
deve retornar um objeto do tipo igual ao valor de REQUESTING_DATA
.
testString: 'assert(requestingData().type === REQUESTING_DATA, "The requestingData
action creator should return an object of type equal to the value of REQUESTING_DATA
.");'
- text: O criador da ação receivedData
deve retornar um objeto do tipo igual ao valor de RECEIVED_DATA
.
testString: 'assert(receivedData("data").type === RECEIVED_DATA, "The receivedData
action creator should return an object of type equal to the value of RECEIVED_DATA
.");'
- text: asyncDataReducer
deve ser uma função.
testString: 'assert(typeof asyncDataReducer === "function", "asyncDataReducer
should be a function.");'
- text: Despachar o criador da ação requestingData deve atualizar a propriedade do state
da loja de busca para true
.
testString: 'assert((function() { const initialState = store.getState(); store.dispatch(requestingData()); const reqState = store.getState(); return initialState.fetching === false && reqState.fetching === true })(), "Dispatching the requestingData action creator should update the store state
property of fetching to true
.");'
- text: Dispatching handleAsync
deve despachar a ação de solicitação de dados e depois despachar a ação de dados recebidos após um atraso.
testString: 'assert((function() { const noWhiteSpace = handleAsync.toString().replace(/\s/g,""); return noWhiteSpace.includes("dispatch(requestingData())") === true && noWhiteSpace.includes("dispatch(receivedData(data))") === true })(), "Dispatching handleAsync
should dispatch the data request action and then dispatch the received data action after a delay.");'
```