2016-07-13 3 views
4

Мне кажется, что методы, добавленные в mapDispatchToProps, должны быть доступны с помощью this.props. Когда я вызываю эти методы, «Неподготовлено TypeError: this.props.onHighlight не является функцией». Кто-нибудь знает, что происходит? Пробовал кучу различных альтернатив для mapDispatchToProps, но никто из них не работает.React-Redux: mapDispatchToProps методы не найдены

import React from 'react'; 
    import { addHighlight, deleteHighlight, selectHighlight } from 'actions/highlight'; 
    import { connect } from 'react-redux'; 
    import jquery from 'jquery'; 
    import { styles } from './styles.scss'; 

    const mapDispatchToProps = dispatch => { 
     return { 
     onHighlight: (start, end, selectedText) => { 
      dispatch(addHighlight(start, end, selectedText)); 
     }, 
     onDeleteHighlight: (source) => { 
      dispatch(deleteHighlight(source)); 
     }, 
     onSelectHighlight: (source) => { 
      dispatch(selectHighlight(source)); 
     } 
     }; 
    } 

    const mapStateToProps = state => { 
     return { highlights: state.highlights, 
       currentTopic: state.currentTopic, 
       selectedHighlight: state.selectedHighlight,}; 
    } 

    ... 
    Other code about Highlight object 
    ... 

    export default connect(
     mapStateToProps, 
     mapDispatchToProps 
    )(Highlight); 
+3

две вещей, чтобы проверить: 1 - Убедитесь, что вы используете подключенную версию компоненты вместо случайного использования бессеансовых версий. 2- убедитесь, что 'this' на самом деле является вашим экземпляром компонента. Убедитесь, что вы не вызываете обработчик событий с 'this' unbound. Его трудно сказать больше, если вы не публикуете часть своего компонента и как вы пытаетесь называть 'onHighlight' – Brandon

ответ

0

Попробуйте использовать bindActionCreators:

import { bindActionCreators } from 'redux' 

const mapDispatchToProps = dispatch => { 
     return bindActionCreators({ 
     onHighlight: addHighlight, 
     onDeleteHighlight: deleteHighlight, 
     onSelectHighlight: selectHighlight 
     }, dispatch); 
    } 
Смежные вопросы