Ошибка изменения типа React: sourceSelector не является функцией

#reactjs #redux #react-redux

#reactjs #redux #react-redux

Вопрос:

Я переключаю свое состояние на redux и столкнулся с этой ошибкой

Ошибка типа: sourceSelector не является функцией

Я вставил код из компонента и действие, которое я отправляю, я думаю, что это что-то в mapDispatchToProps, но не уверен

компонент

 componentDidMount() {
    const { dispatch } = this.props;
    dispatch(getTableData(this.props.apiUrl, this.state.limit, this.state.skip));
  }

const mapStateToProps = ({tableData}) => ({
  tableData,
});

function mapDispatchToProps (dispatch) {
  return {
    getTableData: (data) => dispatch(getTableData(data)),
  }
}

export default connect(
  mapStateToProps,
  mapDispatchToProps,
  { getTableData }
)(SearchableTable);
  

Экшен

 import * as TYPES from './types';
import axios from 'axios';

export const getTableData = (url, limit, skip) => async dispatch => {
  try {
    dispatch({ type: TYPES.FETCH_TABLE_DATA_LOADING });
    const response = await axios.post(url, {
      limit: limit,
      skip: skip,
    });
    await dispatch({
      type: TYPES.FETCH_TABLE_DATA,
      payload: response.data,
    });
    dispatch({ type: TYPES.FETCH_TABLE_DATA_FINISHED });
  } catch (err) {
    dispatch({ type: TYPES.INSERT_ERROR, payload: err.response });
  }
};
  

Ответ №1:

Попробуйте это

 import { bindActionCreators } from "redux";
import { connect } from "react-redux";
import { getTableData } from "actions";

componentDidMount() {
  // Make sure you use this.props.getTable data and not the raw imported
  // getTableData function
  this.props.getTableData(this.props.apiUrl, this.state.limit, this.state.skip));
}

const mapStateToProps = state => ({
  tableData: state.tableData
});

const mapDispatchToProps = dispatch =>
  bindActionCreators(
    {
      getTableData
    },
    dispatch
  );

return connect(
  mapStateToProps,
  mapDispatchToProps
)(SearchableTable);
  

Комментарии:

1. Ничто из этого не имело значения. единственный импорт, который я пропустил, был bindActionCreators. Может ли это быть причиной того, что я использую react router?

2. хм. Хорошо, не могли бы вы опубликовать более полный пример рабочего кода, используя codepen или jsfidde или что-то подобное?