2017-02-26 9 views
0

reduxに接続している反応コンポーネントからディスパッチを呼び出そうとしています。何らかの理由で私はthis.props.dispatchをこのコンポーネントから呼び出すことができません。しかし、コンポーネントではshowPopupアクションが正常に機能していますか?接続コンポーネントでディスパッチを使用できません

Reading the docsconnect()がある場合はいつでもthis.props.dispatchに電話する必要があります。私はここで行方不明の何か?

import React, { Component } from 'react'; 
import { connect } from 'react-redux'; 

// Actions 
import { showPopup } from '../../../actions'; 

class Channels extends Component { 
    render() { 
     console.log(this.props.dispatch); // <- undefined (?) 
     return <div>some stuff</div>; 
    } 
} 

export default connect(null, { showPopup })(Channels); 

アップデート1

以下は、これを短縮する方法はありません、それは動作しますか?

function mapDispatchToProps(dispatch) { 
    let actions = bindActionCreators({ showPopup }); 
    return { ...actions, dispatch }; 
} 

アップデート2

export default connect(null, (dispatch) => bindActionCreators({ showPopup, dispatch }, dispatch))(Channels); 
+0

を使用する必要がない場合はconnect(null, { showPopup, otherAction, someAction })(Channels);、あなたはアクション

を派遣するthis.props.showPopup()またはthis.props.otherActionまたはthis.props.someActionを使用することができますあなたのコンポーネントで 'this.props.showPopup(...)'を呼び出すだけで、実際にあなたのアクションが作成され、ディスパッチされます。 '...'はあなたのアクションクリエイターが取る引数です。これにより、アクションを手動で作成する必要がないため、作業が大幅に簡略化されます。私が知っているBalázsÉ[email protected] –

+0

、私はまだ他のアクションのための 'dispatch'を必要とする;) – NealVDV

+0

理由だけではなく、同様にそのためのアクションの作成者を記述しませんか?あなたはあなたが望むだけ多くのものを持つことができます。 '{showPopup、otherActionCreatorは}'このため –

答えて

0

あなたの最初のコードは自分this.props.dispatchthis.props.showPopupに変更を動作するはずです。

あなたはconnectメソッドに2つ目の引数を渡すと、それは小道具としてそれらのアクションをマッピングします。あなたはあなたができる最初の例ではそれをやったように、あなただけのconnect()(Channels);が、その後、あなたがそれを行う場合this.props.dispatch(showPopup(...))またはthis.props.dispatch(otherAction())またはthis.props.dispatch(someAction())

+0

おかげでしかし、私は 'showPopup'を呼び出す難しさを持っていないです:;良い質問をBalázsÉ[email protected] – NealVDV

+0

他のアクションのディスパッチを示すために私の答えを編集しました。アクションオブジェクトを返す限り、それをディスパッチできます。 – jpdelatorre

関連する問題