2016-02-15 4 views
6

Nur neu zu Reagieren. Ich denke, es ist eine grundlegende Frage, aber ich kann nicht, warum die Minderer nicht gefeuert bekommt oder den Zustand aktualisieren:Fehler in redux beim Ausführen einer Aktion: Uncaught type error: kann Eigenschaft 'type' von undefined nicht lesen

Mein HomeView.js:

 .... 
      const { localeChange, counter, locale } = this.props 
      return (
       <div> 
        <button onClick={() => increment(7)}>Increment</button> 
       <input type='text' value = {counter}/> 
       ..... 
      </div> 
     ) 

    const mapStateToProps = (state) => ({ 
     locale: state.locale, 
     counter: state.counter 
    }) 
    export default connect(mapStateToProps, {localeChange, increment})(HomeView) 

Meine Minderer (konstant, Action und Minderer die gleiche Datei):

export const COUNTER_INCREMENT = 'COUNTER_INCREMENT' 

export function increment (text) { 
    return { type: COUNTER_INCREMENT, text } 
} 

export default function counterIncrement (state = 0, action) { 
    switch (action.type) { 
    case 'INCREMENT': 
     return state + action.text 
    default: 
     return state 
    } 
} 

Und schließlich meine "Eltern" Minderer:

import { combineReducers } from 'redux' 
import { routeReducer as router } from 'react-router-redux' 
import locale from './modules/locale' 
import counter from './modules/counter' 

export default combineReducers({ 
    locale, 
    router, 
    counter 
}) 

Was ich verstehen:

In meinem Zustand habe ich ein Feld namens counter (es ist dort mit redux dev tools). Wenn ich auf die Schaltfläche klicken I Schritt Aktion versenden, also sollte ich wirklich eine Aktion wie diese Versandfertig: {type: COUNTER_INCREMENT, Text: 7}

jedoch counterIncrement Funktion (Druckminderer) erhält Aktion als undefined: Uncaught type error: cannot read property 'type' of undefined. Irgendwie könnte ich das richtig debuggen? Ich setze einen Breakpoint in den Reducer CounterIncrement, werde aber nicht gefeuert.

Antwort

4

Redux validieren, dass jede ausgelöste Aktion tatsächlich eine type -Eigenschaft enthält.

Meine Vermutung ist, dass Sie dispatch() mit undefined anrufen. Ihr Beispielcode enthält keine Dispatch-Aufrufe, daher kann ich Ihnen nicht weiterhelfen - aber ich schätze, dass es trivial ist, das herauszufinden. Entweder rufen Sie dispatch() mit den falschen Argumenten auf, oder Ihr Aktionsersteller gibt ein Objekt mit einer type-Eigenschaft nicht zurück.

Seitennotiz (nicht verwandt mit Ihrer Frage), aber Ihre Aktion Creator Typbezeichnung stimmt nicht mit der in Ihrem Reducer überein.

+1

Uppps, ja. Es war nicht in dem Code, den ich hochgeladen habe, aber ich schrieb Import-Inkrement anstelle von Import {Inkrement} – user2670996

Verwandte Themen