#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 или что-то подобное?