2017-02-26 2 views
0

Ich versuche, Dispatch von einer Reaktionskomponente aufzurufen, die mit Redux verbunden ist. Aus irgendeinem Grund kann ich this.props.dispatch von dieser Komponente nicht aufrufen. Aber die showPopup Aktion funktioniert gut in der Komponente?Versand ist nicht in der verbundenen Komponente verfügbar

Reading the docs es heißt, dass, wenn Sie die connect() haben, sollten Sie this.props.dispatch aufrufen können. Alles, was ich hier vermisse?

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

Update 1

Nachfolgend macht es Arbeit gibt es keine Möglichkeit, dies zu verkürzen?

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

aktualisieren 2

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

verwenden Wenn Sie es tun, wie Sie es im ersten Beispiel, so können Sie Rufen Sie einfach 'this.props.showPopup (...)' in Ihrer Komponente auf, wodurch Ihre Aktion tatsächlich erstellt und versendet wird. '...' sind irgendwelche Argumente, die Ihr Handlungsentwickler annimmt. Dies vereinfacht die Vorgänge erheblich, da Sie die Aktionen nicht manuell erstellen müssen. –

+0

@ BalázsÉdes Ich weiß, aber ich brauche immer noch die "Versand" für eine andere Aktion;) – NealVDV

+0

Warum schreiben Sie nicht nur eine Aktion Creator dafür? Sie können so viele davon haben, wie Sie möchten. –

Antwort

0

Ihr sollte zuerst Code arbeiten nur Ihre this.props.dispatch-this.props.showPopup ändern.

Wenn Sie ein zweites Argument an die Methode connect übergeben, werden diese Aktionen als Requisiten zugeordnet. connect(null, { showPopup, otherAction, someAction })(Channels);, können Sie this.props.showPopup() oder this.props.otherAction oder this.props.someAction verwenden die Aktion

zu versenden Wenn Sie das tun nur connect()(Channels); dann müssen Sie this.props.dispatch(showPopup(...)) oder this.props.dispatch(otherAction()) oder this.props.dispatch(someAction())

+0

Danke dafür habe ich keine Schwierigkeiten beim Aufruf der 'showPopup'. Ich brauche den Versand, um eine andere Aktion aus einer importierten Bibliothek aufzurufen. – NealVDV

+0

Bearbeitete meine Antwort, um Ihnen zu zeigen, dass Sie andere Aktionen versenden. Solange es ein Aktionsobjekt zurückgibt, können Sie es versenden. – jpdelatorre

Verwandte Themen