2016-12-14 4 views
1

React.jsの学習を始めたばかりですが、今はReduxについて少し深く掘り下げる予定です。より良い理解を得るための私の最初の仕事は、ナビゲーション内のクリックに基づいて異なる見出しを異なるページに表示する方法です。このアクションは、アプリケーションのナビゲーションコンポーネントで発生します。ヘッドライン/イントロコンポーネントにヘッドラインが表示されます。 Uncaught TypeError:ディスパッチは関数ではありません(...)私のエラーは、ナビゲーションコンポーネントのどこかにあるか、私のアクションにあると思います。ご協力いただきありがとうございます!React/Redux異なるページに異なる見出しが表示される

intro.js

import React, { Component } from 'react' 
import {bindActionCreators} from 'redux' 
import {connect} from 'react-redux' 
import {loadIntro} from '../actions/index' 
require('../../scss/Intro.scss'); 

class Intro extends Component { 

render() { 


     return (
      <div className="introWrapper"> 
       <ul> 
       <h2>{this.props.activeTitle}</h2> 
       </ul> 
      </div> 
     ); 
    } 


}; 


function mapStateToProps(state) { 
    return { 
     //The different titles 
     activeTitle: state.activeTitle 
    }; 
} 

Nav.js

import React, { Component } from 'react' 
import { Link } from 'react-router'; 
import TestComponent from '../containers/test-component'; 
import {loadTravel} from '../actions/index' 
import {connect} from 'react-redux'; 
import {bindActionCreators} from 'redux'; 
require('../../scss/nav.scss'); 

class Nav extends Component { 

render() { 
    return (
    <div> 

    <nav className="wrapperNavigation"> 

     <ul> 
      <li onClick={() => this.props.loadTravel()}><Link to="/travel" activeClassName="active">Travel</Link></li> 
      <li><Link to="/living" activeClassName="active">Living</Link></li> 

     </ul> 
    </nav> 
    </div> 
    ) 
    } 

} 



function mapDispatchToProps(dispatch) { 
    return bindActionCreators({ loadTravel:loadTravel}, dispatch); 

    } 

export default connect(mapDispatchToProps)(Nav); 

減速活性-intro.js

export default function (state = [], action) { 
     if (action.type ==="LOAD_TRAVEL") { 

      var newState = Object.assign({}, state, {title:action.title}); 
      return newState; 
      } 


return state; 
} 

アクション/ index.js

export const loadTravel =() => { 


    return { 

     type: "LOAD_TRAVEL", 
     title: "Schubiduu" 
    } 
}; 

リデューサー/ index.js

import {combineReducers} from 'redux'; 
import titleReducer from './reducer-active-intro.js'; 
/* 


const allReducers = combineReducers({ 
    activeTitle: titleReducer 
}); 

export default allReducers 

答えて

1

mapDispatchToPropsは、接続先の第二引数でなければなりません。私の問題を解決し

export default connect(null, mapDispatchToProps)(Nav); 
+0

おかげで、私は今の状態にアクセスすることができます:あなたがやるべきことどのような状態マッピングを持っていない場合

は、あなたが最初の引数としてnullを渡すことができます。しかし、今私は別のエラーを受けています。私はそれが私のオブジェクトに関連していると思う。私のレデューサー - アクティブ - intro.js.invariant.jsに任命? ** Uncaught Error:オブジェクトがReactの子として有効ではありません(found:キー{title}のオブジェクト)。子コレクションをレンダリングする場合は、代わりに配列を使用するか、ReactアドオンのcreateFragment(オブジェクト)を使用してオブジェクトをラップします。 'Intro'のレンダリングメソッドをチェックしてください。(...)** – zbkrt

+0

存在しない状態オブジェクトを修正しようとしているため、新しい質問をすることができます。 –

+0

答えは –

関連する問題