2016-08-16 18 views
13

में अपरिभाषित है, वर्तमान में मैं this ट्यूटोरियल का अनुसरण कर रहा हूं। मैं निम्नलिखित कोड में mapStateToProps को शामिल में कोई समस्या का एक सा मारा गया है:Redux राज्य mapStateToProps

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; 

यह pair प्रोप से दो बटन प्रस्तुत करना माना जाता है:

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; 

यहाँ वोटिंग घटक है कि आयातित किया गया है। vote प्रोप एक ऐसा फ़ंक्शन है जिसे क्लिक पर निष्पादित किया जाएगा, hasVoted सही होने पर बटन अक्षम करता है और विजेता केवल दिखाए गए विजेता घटक को प्रस्तुत करता है।

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

इसके बजाय मैं कह रही है कि राज्य state.getIn लाइन में अपरिभाषित है एक त्रुटि हो रही है:

राज्य एक immutableJS नक्शा है कि इस तरह दिखता है होने की उम्मीद है।

कोड राज्य की स्थापना सूचकांक में है:

const store = createStore(reducer); 

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

मैं सेट करने के बाद store.getState() लॉग इन किया है और ऐसी उम्मीद है के रूप में लेकिन mapStateToProps में undefined। मैंने उपर्युक्त संदर्भ में राज्य चर को भी लॉग किया और यह भी अपेक्षित है।

मैं भी राज्य में सामान्य रूप से सेट और यह आश्चर्यजनक रूप से काम करता है !:

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

ऊपर राज्य के मूल्य वास्तव में क्या सर्वर

अन्त में यहाँ क्या मेरी कम करने लग रहा है से प्राप्त किया जाता है जैसे:

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; 

मैं क्या गलत कर रहा हूं?

संपादित करें: मुझे एहसास हुआ कि mapStateToPropsstore.dispatch() के बाद नहीं कहा जा रहा है। संभावित कारणों से docs के माध्यम से mapStateToProps को कॉल नहीं किया जा रहा है और यह उनमें से एक नहीं है।

+0

ठीक कर देंगे दिया जाता है मैं आप जोड़ना 'redux-logger' का सुझाव मौजूदा मध्यवर्ती लोगों को यह सत्यापित करने के लिए कि क्या कार्य ठीक से प्रेषित किए गए हैं या नहीं; यह सुझाव के लिए हमें एक बेहतर विचार – Deadfish

+0

@Deadfish धन्यवाद दे सकता है। मैंने रेडक्स-लॉगर का उपयोग किया और कार्रवाई सही तरीके से भेजी जा रही है हालांकि मुझे नहीं पता कि पिछली स्थिति क्यों अनिश्चित है क्योंकि मेरा प्रारंभिक राज्य खाली नक्शा है। मुझे यह भी एहसास हुआ कि सर्वर से जुड़े किसी के लिए, प्रेषण के बाद mapStateToProps को नहीं कहा जाता है। – esaminu

+0

मुझे लगता है कि जब राज्य उत्परिवर्तित हो जाता है तो 'mapStateToProps' को नहीं कहा जाता है; लेकिन आपका reducer कोड ठीक दिखता है; क्या आप अपना पूरा कोड जिथब या गीस्ट के माध्यम से साझा कर सकते हैं; – Deadfish

उत्तर

19

आप रेड्यूसर में स्विच स्टेटमेंट में डिफ़ॉल्ट कार्रवाई नहीं है। यही वजह है भले ही आप कम करने पैरामीटर में प्रारंभिक अवस्था उल्लेख किया है, अपरिभाषित दुकान प्रारंभिक अवस्था के रूप में

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; 

डिफ़ॉल्ट बयान जोड़ना मुद्दा :)

+1

यह तय है, धन्यवाद! – esaminu

संबंधित मुद्दे