This.props.dispatch no es una function – React-Redux

Estoy tratando de enviar una acción desde mi componente inteligente. Intenté usar el mapDispatchToProps y this.props.dispatch(actions.getApplications(1)) pero ninguno vincula las acciones a los props .

No estoy seguro si es porque mi mapStateToProps no está incluido? Traté de includelo pero tampoco funcionó.

Cualquier ayuda es apreciada, me disculpo por la longitud del bloque de código a continuación.

 import classNames from 'classnames'; import SidebarMixin from 'global/jsx/sidebar_component'; import Header from 'common/header'; import Sidebar from 'common/sidebar'; import Footer from 'common/footer'; import AppCard from 'routes/components/appCard'; import { getApplications } from 'networkingux/actions/appActions'; import { connect } from 'react-networkingux' import { bindActionCreators } from 'networkingux' import actions from 'networkingux/actions'; import { VisibilityFilters } from 'networkingux/actions/actionTypes'; class ApplicationContainer extends React.Component { constructor(props){ super(props) this.state = { applicants: [] } this.onDbLoad = this.onDbLoad.bind(this) } onDbLoad(){ console.log(this.props.dispatch) // this.props.getApplications(1) } render() { return ( <Col sm={12} md={4} lg={4}> <PanelContainer style={panelStyle}> <Panel> <PanelBody > <Grid> <Row> { this.onDbLoad() } </Row> </Grid> </PanelBody> </Panel> </PanelContainer> </Col> )} } function mapDispatchToProps(dispatch){ return bindActionCreators({ getApplications: getApplications },dispatch) } export default connect(null, mapDispatchToProps)(ApplicationContainer); @SidebarMixin export default class extends React.Component { render() { const app = ['Some text', 'More Text', 'Even More Text']; var classes = classNames({ 'container-open': this.props.open }) return ( <Container id='container' className={classes}> <Sidebar /> <Header /> <Container id='body'> <Grid> <Row> <ApplicationContainer /> </Row> </Grid> </Container> <Footer /> </Container> )} } 

Como mencionó en su pregunta, mapDispatchToProps debería ser el segundo argumento para connect .

Si no tiene que hacer ningún mapeo de estado, puede pasar null como primer argumento:

 export default connect(null, mapDispatchToProps)(ApplicationContainer); 

Después de hacer esto, entonces this.props.getApplications estará vinculado.


Según su comentario, si desea tener acceso a this.props.dispatch LUGAR de acciones bindings, simplemente llame a connect() sin pasar ningún mapeador, y el comportamiento pnetworkingeterminado inyectará dispatch .

Si desea tener this.props.dispatch creadores de acciones enlazadas como this.props.dispatch , debe agregar un dispatch al object que pase a mapDispatchToProps también. Algo así como dispatch: action => action . O bien, dado que no está poniendo todo bajo una key raíz (como actions ), podría hacer:

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

Según la pregunta frecuente de Redux en http://networkingux.js.org/docs/FAQ.html#react-props-dispatch , this.props.dispatch está disponible de forma pnetworkingeterminada si no proporciona su propia function mapDispatchToProps . Si proporciona una function mapDispatchToProps , usted es responsable de devolver un dispatch designado por prop.

O bien, puede asegurarse de que sus creadores de acciones estén pnetworkingefinidos utilizando la utilidad bindActionCreators de Redux y omita tener que preocuparse por usar this.props.dispatch en su componente.