usar react para método medium mapstatetoprops funciona framework estado español ejemplos ejemplo componentes como javascript reactjs redux react-redux immutable.js

javascript - react - redux js framework



El estado de redux no está definido en mapStateToProps (1)

Actualmente estoy siguiendo this tutorial. He encontrado un pequeño obstáculo que involucra a mapStateToProps en el siguiente código:

import React from ''react''; import Voting from ''./voting''; import {connect} from ''react-redux''; const mapStateToProps = (state) => { return { pair: state.getIn([''vote'',''pair'']), winner: state.get(''winner'') }; } const VotingContainer = connect(mapStateToProps)(Voting); export default VotingContainer;

Aquí está el componente de votación que se importa:

import React from ''react''; import Vote from ''./Vote''; import Winner from ''./winner''; const Voting = ({pair,vote,hasVoted,winner}) => <div> {winner ? <Winner winner={winner}/> : <Vote pair={pair} vote={vote} hasVoted={hasVoted}/> } </div> export default Voting;

Se supone que debe renderizar dos botones del pair prop. El prop de vote es una función que se ejecutará al hacer clic, hasVoted deshabilita los botones cuando verdadero y el ganador solo presenta el componente ganador como se muestra.

Se espera que el estado sea un mapa de JS inmutable que se vea así:

Map({ vote:{ pair:List.of(''Movie A'',''Movie B'') } });

En su lugar, aparece un error que indica que el estado no está definido en la línea state.getIn.

El código que establece el estado está en el índice:

const store = createStore(reducer); const socket = io(document.location.protocol + ''//'' + document.location.hostname + '':8090''); socket.on(''state'', state => store.dispatch({ type: ''SET_STATE'', state }));

He registrado store.getState() después de la configuración y es como se esperaba pero undefined en mapStateToProps . También registré la variable de estado en el contexto anterior y también es como se esperaba.

También puse el estado normalmente y ¡sorprendentemente funciona !:

store.dispatch({ type: ''SET_STATE'', state: { vote: { pair: [''Movie A'', ''Movie B''] } } });

El valor del estado anterior es exactamente lo que se recibe del servidor.

Por último, esto es lo que parece mi reductor:

import React from ''react''; import {Map, fromJS} from ''immutable''; const reducer = (state = Map(), action) => { switch (action.type) { case ''SET_STATE'': return state.merge(action.state); } } export default reducer;

¿Qué estoy haciendo mal?

EDIT: me di cuenta de que mapStateToProps no se llama después de store.dispatch() . mapStateToProps los docs por las posibles razones mapStateToProps que no se está llamando a mapStateToProps y no es una de ellas.


Su reductor no tiene una acción predeterminada en la instrucción de cambio. Es por eso que aunque mencionó el estado inicial en parámetros reductores, undefined se devuelve como estado inicial de almacenamiento

import React from ''react''; import {Map,fromJS} from ''immutable''; const reducer = (state = Map() ,action) => { switch(action.type){ case ''SET_STATE'': return state.merge(action.state); default: return state; } } export default reducer;

Agregar la declaración por defecto solucionará el problema :)