2017-06-21 14 views
1

ページングの 'onSelect'イベントで、私はレンダリングの外側とコンポーネントのクラス内で定義されている関数を呼び出しています。しかし、時に来て、エラーの下に発射イベント -this.props.dispatchは、反応するjsコンポーネントファイル内の関数ではありません。

ここ

BlogList.js:101 Uncaught TypeError: this.props.dispatch is not a function

である私のコードsnippit -

import React from 'react'; 
import StaticLayout from '../Layout/StaticLayout'; 
import { Link } from 'react-router-dom'; 
import { getBlogList } from '../actions/signupActions'; 
import { bindActionCreators } from 'redux'; 
import { connect } from 'react-redux'; 
import dateFormat from 'dateformat'; 

import { Pagination } from 'react-bootstrap'; 
import { push } from 'react-router-redux'; 
import queryString from 'query-string' 


class BlogList extends React.Component { 
    constructor(props){ 
     super(props); 
     document.title = "Blogs"; 

     this.changePage = this.changePage.bind(this); 
    } 

    componentDidMount() { 
     this.props.getBlogList(); 
    } 

    render(){ 

     //===pagination variable======== 
     const per_page = 1; 
     let pages = 0; 
     if(this.props.blogListData !== undefined){ 
      pages = Math.ceil(this.props.blogListData.count/per_page) ; 
     } 
     const current_page = this.props.page; 
     const start_offset = (current_page - 1) * per_page; 
     let start_count = 0; 
     //===End pagination variable======== 


     return(
      <StaticLayout> 
       <blog list related html /> 
       <Pagination className="users-pagination pull-right" bsSize="medium" maxButtons={10} first last next prev boundaryLinks items={pages} activePage={current_page} onSelect={this.changePage} /> 
      </StaticLayout> 
     ); 
    } 

    changePage(page){ 
     alert(page); 
     this.props.dispatch(push('/?page_no='+page)) 
    } 


} 


function mapStateToProps(state,ownProps){ 
    var queryParam = queryString.parse(ownProps.location.search); 
    return { 
     blogListData: state.UserReducer.blogData, 
     page: Number(queryParam.page_no) || 1, 
    } 
} 

function mapDispatchToProps(dispatch) { 
     return bindActionCreators({getBlogList: getBlogList}, dispatch) 
} 
export default connect(mapStateToProps, mapDispatchToProps) (BlogList); 

Plzを私は私が間違っているのか知ってみましょうか!

+1

は、あなたが呼び出すコードを表示することができます/レンダリング

+0

私はコード、plzチェックを更新しました。 – Atul

答えて

1

dispatchあなたはカスタム関数でそれをオーバーライドしていない場合にのみ接続を使用した場合のコンポーネントに使用可能です。あなたのケースではmapDispatchToProps関数です。だから、あなたが何ができるか

function mapDispatchToProps(dispatch) { 
    return bindActionCreators({getBlogList: getBlogList, push: push}, dispatch) 
} 

ようmapDispatchToProps機能に追加して、コンポーネントへの小道具としてpushアクションが利用できるようにと同じように使用され

changePage(page){ 
    alert(page); 
    this.props.push('/?page_no='+page) 
} 
+0

私は同じことを適用しましたが、それは何のエラーも与えず、どんなURLも呼び出していません。 .. – Atul

+0

'this.props.history.push(location.pathname + '?page_no =' + page)'これは私のために働く.... thanks#Shubham – Atul

0

changePageを接続して接続できます。私はこのモデルを読みやすく、維持しやすいと感じています。

function mapStateToProps(state,ownProps){ 
    var queryParam = queryString.parse(ownProps.location.search); 
    return { 
     blogListData: state.UserReducer.blogData, 
     page: Number(queryParam.page_no) || 1, 
    } 
} 

const dispatch = (dispatch, ownProps) => ({ 
    changePage: (page) => { 
    alert(page); 
    dispatch(push('/?page_no='+page)) 
    } 
}); 

export default connect(mapStateToProps, dispatch) (BlogList); 
+0

あなたが言ったのと同じことをしました。このようなコンポーネントをエクスポートします - >>>> 'デフォルトの接続をエクスポートします(mapStateToProps、mapDispatchToProps、dispatch)(BlogList); 'しかし、これは' this.props.getBlogListは関数ではありません.'ですが、それはです。 – Atul

+0

あなたは間違った場所に議論があると思います。チェックアウトhttps://github.com/reactjs/react-redux/blob/master/docs/api.md#connectmapstatetoprops-mapdispatchtoprops-mergeprops-options –

関連する問題