[英]Fetching data from async api call using react redux
I'm having problem with an api call in my React Redux project. 我在React Redux项目中的api调用遇到问题。 Here's the code snippet from the project.
这是项目中的代码片段。
poiAction.js poiAction.js
export function poiSuccess(pois) {
// The log detail is below
console.log("POI: ", pois);
return {
pois,
type: POI_FETCH_SUCCESS
};
}
export function poiFetch(pois) {
return {
pois,
type: POI_FETCH_ATTEMPT
};
}
export function fetchPoi(token) {
return dispatch =>
axios({
method: 'get',
url: 'http://localhost:9090/poi',
headers: {
'x-access-token': token
},
})
.then((pois) =>{
// let poi = pois.data[0];
// console.log("POIS: ", pois.data[0]);
dispatch(poiSuccess(pois));
})
.catch((error) => {
throw(error);
})
}
console log output: 控制台日志输出:
poiReducer.js poiReducer.js
export default function poi(state = [], action){
switch(action.type){
case POI_FETCH_ATTEMPT:
return state;
case POI_FETCH_FAILED:
return state;
case POI_FETCH_SUCCESS:
// The console log output is same as poiAction
console.log("Reducer: ", action.pois);
return [action.pois, ...state];
break;
default:
return state;
}
}
The console log output is same as poiAction 控制台日志输出与poiAction相同
Root Reducer 根减少剂
const rootReducer = combineReducers({
LoginReducer,
PoiReducer
});
The component to display the list from the api call: 用于显示api调用列表的组件:
Dashboard.js Dashboard.js
class Dashboard extends Component {
constructor(props) {
super(props);
this.state = {
poi: '',
token: null
};
}
componentWillMount() {
let token = sessionStorage.getItem("token");
this.setState({token});
this.props.actions.fetchPoi(token);
}
render() {
console.log("POIS: ", this.props.pois);
return (
<div>
<h1>Dashboard</h1>
</div>
);
}
}
Dashboard.propTypes = {
pois: PropTypes.array.isRequired,
actions: PropTypes.object.isRequired,
};
function mapStateToProps(state) {
console.log("State: ", state);
return {
pois: state.poiReducer
};
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(poiAction, dispatch)
};
}
export default connect(mapStateToProps, mapDispatchToProps)(Dashboard);
Here this.props.pois
is undefined
and the value of state
from mapStateToProps
is: 这里
this.props.pois
是undefined
,而mapStateToProps
的state
的值是:
What am I missing? 我想念什么? How do I access the list that's returning from the api call ?
如何访问从api调用返回的列表?
Thanks 谢谢
When you combine your reducers, you do this 当您结合使用减速器时,您会这样做
const rootReducer = combineReducers({
LoginReducer,
PoiReducer
});
which means 意思是
const rootReducer = combineReducers({
LoginReducer : LoginReducer,
PoiReducer : LoginReducer
});
And that's not what you want. 那不是您想要的。
it should be 它应该是
const rootReducer = combineReducers({
loginReducer : LoginReducer,
poiReducer : LoginReducer
});
Also, for some reason, you got a rootReducer inside your root reducer, which is a little weird. 另外,由于某种原因,您在根减速器中有一个rootReducer,这有点奇怪。
So the way to access to poiReducer would be 所以访问poiReducer的方法是
function mapStateToProps(state) {
console.log("State: ", state);
return {
pois: state.rootReducer.poiReducer
};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.