【发布时间】:2016-07-02 15:20:04
【问题描述】:
我是 redux 和 es6 语法的新手。问题来了:
有一个包含多个帖子的应用。
const initialState = {
items: {
3: {title: '1984'},
6: {title: 'Mouse'},
19:{title: 'War and peace'}
}
}
应用收到一系列喜欢的帖子 ID:
dispatch(receiveLikedPosts(3, {id:3, ids: [3,6]}));
function receiveLikedPosts(ids) {
return {
type: LIKED_POSTS_RECEIVED,
ids
};
}
有一个帖子缩减器:
function posts(state = initialState, action) {
switch (action.type) {
case LIKED_POSTS_RECEIVED:
// here I need to update my posts state: post.liked => true (only 3 and 6 post)
default:
return state;
}
}
1) 我必须更新我的减速器 LIKED_POSTS_RECEIVED 代码。不知道如何以正确的方式制作它。
2) 多次分派事件是否正确? (每个喜欢的帖子发送一次)
代码如下:
// action
let ids = [3,6]
for (let id of ids) {
dispatch({type: LIKE, id});
}
// reducers
function post(state, action) {
switch (action.type) {
case LIKE:
return Object.assign({}, state, {
liked: true
});
default:
return state;
}
}
function posts(state = initialState, action) {
switch (action.type) {
case LIKE:
return Object.assign({}, state, {
[action.id]: post(state[action.id], action)
});
default:
return state;
}
}
【问题讨论】:
-
action 不应该引起其他的 action,但是 dispatch 很多 action 本身也不是坏事。
-
@dandavis "动作不应引起其他动作" - 除非您使用 thunk。
标签: javascript reactjs redux flux