Hier ist mein Code:Wh gibt redux reducer ein leeres Objekt zurück?
Die Aktion Schöpfer
export function fetchHead() {
const url = HEAD_URL;
const request = axios.get(url);
return {
type: FETCH_HEAD,
payload: request
};
}
Der Reducer
import { FETCH_HEAD } from '../actions';
import _ from 'lodash';
export default function(state = {}, action) {
switch (action.type) {
case FETCH_HEAD:
return _.mapKeys(action.payload.data.articles, 'id');
default:
return state;
}
}
Reducer Schlüssel, versprechen
import { combineReducers } from 'redux';
import HeadReducer from './head_reducer';
const rootReducer = combineReducers({
heads: HeadReducer
});
export default rootReducer;
Komponente
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { fetchHead } from '../actions';
class HeadNews extends Component {
componentDidMount() {
this.props.fetchHead();
console.log(this.props.heads);
}
render() {
return <div>Hello</div>;
}
}
function mapStateToProps(state) {
return { heads: state.heads };
}
export default connect(mapStateToProps, { fetchHead })(HeadNews);
Sie die async der Netz- Anrufe fehlen, wird api Aufruf asynchron sein und es werden die Daten synchron nicht zurück, so dass Sie einige Middleware enthalten müssen wie 'Redux-thunk', Scheck diese Antworten: [Warum brauchen wir Middleware für asynchronen Fluss in Redux?] (https://stackoverflow.com/questions/34570758/why-do-we-need-middleware-for-async-flow-in-redux) und [Wie gebe ich die Antwort von einem asynchronen Anruf zurück?] (Https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –
Ich denke redux -Promise wird das lösen! – RaMsIs