how to map returned Array of Objects? When i click the button to fetch the blogs, i am getting this response
Now in my app js,
import React from 'react';
import Blog from '../components/Blog';
import Form from '../components/Form';
import Root from '../components/Root';
import { Router, Route, IndexRoute, browserHistory} from 'react-router';
import axios from 'axios';
import { connect } from 'react-redux';
class App extends React.Component {
render(){
return(
<Router history={browserHistory}>
<Route path={'/'} component={Root}>
<IndexRoute component={ () => (<Blog blog_posts={this.props.posts} fetchBlogs={this.props.fetchBlogs} />) } ></IndexRoute>
<Route path={'/form'} component={Form}></Route>
</Route>
</Router>
);
}
}
const mapStateToProps = (state) => {
return {
posts: state.blogs
};
};
const mapDispatchToProps = (dispatch) => {
return {
fetchBlogs : () => {
dispatch(
{ type: "FETCHING_BLOG" },
axios.get("https://jsonplaceholder.typicode.com/posts")
.then( (response) => {
dispatch({
type: "FETCHING_SUCCESS",
payload: response.data
})
} )
.catch( (err) => {
dispatch({
type: "FETCHING_ERROR",
payload: err
})
})
);
}
};
};
export default connect(mapStateToProps, mapDispatchToProps)(App);
i am passing the posts from mapStateToProps( which holds the response data) thru props into Blog Component in the IndexRoute.
in my Blog Component, iam logging the passed props (as seen in the image above) and it is passed fine. Now it is the blog_posts.. now i am mapping the blog_posts and doesnt work and returns ncaught TypeError: Cannot read property 'map' of undefined. Please explain why is it not working.. maybe blog_post should contain another array which the values shouldbe stored there??? Please kindly explain what im doing wrong
My blog component:
import React from 'react';
class Blog extends React.Component {
render(){
console.log("Passed", this.props);
let b = this.props.blog_posts.map(item => {
console.log(item)
});
return(
<div>
<button onClick={() => this.props.fetchBlogs()}>Fetch Users!</button>
</div>
);
}
}
export default Blog;
reducer:
const initBlogState = {
fetching: false,
fetched: true,
blogs: [],
error: null
};
export default function blogReducer (state = initBlogState, action) {
switch(action.type)
{
case "FETCHING_BLOG":
state = {
...state,
fetching: true
};
break;
case "FETCHING_SUCCESS":
state = {
...state,
fetched: true,
blogs: action.payload
};
break;
case "FETCHING_ERROR":
state = {
...state,
fetched: false,
error: action.payload
};
break;
default:
break;
}
return state;
};
Provider:
import React from 'react';
import ReactDOM from 'react-dom';
import App from './container/App';
import { Provider } from 'react-redux';
import store from './store';
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>, document.getElementById('root'));
Store:
import { createStore, applyMiddleware } from 'redux';
import logger from 'redux-logger';
import blogReducer from './reducers/blogReducer';
import thunk from 'redux-thunk';
const store = createStore(
blogReducer,
{},
applyMiddleware(thunk, logger())
);
export default store;