2016-02-15 12 views
6

Reactを新しく追加しました。私はそれが基本的な質問だと思うが、減速が解雇や状態を更新されませんなぜ私が取得することはできません。アクション実行時のエラー:キャッチされていないタイプのエラー:未定義の 'タイプ'のプロパティを読み取ることができません。

マイ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) 

マイ減速(定数、アクションと減速同じファイル):

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 
    } 
} 

そして最後に、私の "親" 減速:

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 
}) 

私は理解してどのような:

私の状態では、私はcounterという名前のフィールドを持っています(それはredux開発ツールを使用しています)。 私はインクリメントアクションを派遣ボタンをクリックして、私は本当にこのようなアクション派遣すべきとき: {タイプ:COUNTER_INCREMENT、テキスト:7}

しかしcounterIncrement機能(減速)未定義としてアクションを取得します:Uncaught type error: cannot read property 'type' of undefinedを。 これを正しくデバッグできますか?私は減速機counterIncrementにブレークポイントを置くが、解雇されることはない。

答えて

4

Reduxは、トリガーするすべてのアクションに実際にタイププロパティが含まれていることを検証します。

私の推測では、dispatch()は未定義です。あなたのサンプルコードにはディスパッチコールが含まれていないので、私はそれ以上の助けはできませんが、私の推測では、把握するのは簡単なことです。間違った引数を使用してdispatch()を呼び出すか、アクション作成者がtypeプロパティを持つオブジェクトを返しません。

あなたの質問には関係ありませんが、あなたのアクションクリエータータイプのラベルがあなたのレデューサーのものと一致しません。

+1

Uppps、はい。私がアップロードしたコードにはありませんでしたが、import {increment}の代わりにimport incrementを書いていました。 – user2670996

関連する問題