@25sprout/react-starter
Version:
25sprout web starter with React
55 lines (44 loc) • 1.03 kB
JavaScript
import { createAction, handleActions } from 'redux-actions';
import { useRedux } from 'util/hook/redux';
export const getBlogs = createAction('GET_BLOGS', async () => {
const data = new FormData();
data.append('num', '10');
try {
const posts = await fetch('https://www.25sprout.com/bin/bloglist_2016.php', {
method: 'POST',
body: data,
});
return posts.json();
} catch (e) {
return { list: [] };
}
});
export const cleanBlogs = createAction('CLEAN_BLOGS');
export const defaultState = {
loading: false,
posts: [],
};
export const reducer = {
blogs: handleActions(
{
GET_BLOGS_PENDING: state => ({
...state,
loading: true,
}),
GET_BLOGS_FULFILLED: (state, action) => ({
...state,
posts: action.payload.list,
loading: false,
}),
CLEAN_BLOGS: state => ({
...state,
posts: [],
}),
},
defaultState,
),
};
const mapHooksToState = state => ({
posts: state.blogs.posts,
});
export const useBlog = () => useRedux(mapHooksToState, { getBlogs, cleanBlogs });