Я поставил логику действия для получения API DATA от AXIOS, затем в качестве метода отправки я попытался привести полученные данные в состояние. Но в этот момент действия до редюсера не дошли.
(6) [{…}, {…}, {…}, {…}, {…}, {…}]
index.js:23 Uncaught (in promise) TypeError: dispatch is not a function
at index.js:23
Просто я получил эту ошибку выше. Это означает, что это действие действительно получило данные API, а затем при попытке отправить его не удалось. Я мог бы найти точку соединения этого.
Я прикрепляю JavaScript:
редуктор.js:
import * as types from '../Actions/Types';
const initialState = {
contents: [{
poster: 'https://i.imgur.com/633c18I.jpg',
title: 'state title',
overview: 'state overview',
id: 123,
}],
content: {},
};
const reducer = (state = initialState, action) => {
switch (action.type) {
case types.LOADING_DATA: {
console.log(`something happend ${action.payload}`);
return state.set('contents', action.payload);
}
case types.BTN_ON_CHANGE: {
return state;
}
case types.BTN_ON_CLICK: {
return state;
}
case types.BTN_ON_SUBMIT: {
return state;
}
default:
return state;
}
};
export default reducer;
действия.js
import axios from 'axios';
import * as types from './Types';
const holder = [];
const API_GET = () => (
axios.get('https://api.themoviedb.org/3/search/movie?api_key=<<APIKEY>>&query=avengers+marvel')
.then(res => res.data)
.then(data => console.log(data.results))
.then(results => holder.add(results))
);
// export const loadingData = value => ({
// type: types.LOADING_DATA,
// value,
// });
export const loadingData = () => (dispatch) => {
axios.get('https://api.themoviedb.org/3/search/movie?api_key=54087469444eb8377d671f67b1b8595d&query=avengers+marvel')
.then(res => res.data)
.then(data => console.log(data.results))
.then(results => dispatch({
type: types.LOADING_DATA,
payload: results,
}));
};
export const sample = () => (
console.log('none')
);
ЗагрузкаDataButton.js:
import React from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { Button } from 'antd';
import { loadingData } from '../Actions';
const LoadingDataButton = props => (
<div>
<Button
type="danger"
onClick={
props.loadingData()
}
>
Loading
</Button>
</div>
);
LoadingDataButton.propTypes = {
loadingData: PropTypes.func.isRequired,
};
const mapStateToProps = state => ({
contents: state.contentR.contents,
});
const mapDispatchToState = {
loadingData,
};
export default connect(mapStateToProps, mapDispatchToState)(LoadingDataButton);
loadingData
у вас есть шаг регистрации (.then(data => console.log(data.results))
).console.log
возвращает undefined, поэтому, помещая это в середину вашей цепочки обещаний, следующий обработчик помещает undefined в полезную нагрузку действия. Удаление этой строки исправляет это? - person zkcro   schedule 07.08.2018redux-thunk
в свой магазин)? - person zkcro   schedule 07.08.2018loadingData
возвращает функцию, вам нужно какое-то промежуточное программное обеспечение, чтобы что-то с этим делать. - person zkcro   schedule 07.08.2018