我有一系列评论,我希望根据ID过滤并更改特定的键/值对。我的控制台日志功能返回数组中的正确项目,但我不确定正确的语法,用于获取.filter函数的结果并更改“喜欢的”项目。来自' false'真的'。如果它适用于这种情况,我可以使用扩展运算符。
import * as types from '../actions/actionTypes';
import initialState from './initialState';
export default function commentReducer(state = initialState.comments, action) {
switch (action.type) {
case types.ADD_COMMENT_LIKE_SUCCESS:
const content = Object.assign({}, state);
const likedComment = content.data.filter(comment => (
comment.id === action.commentId
));
console.log(likedComment[0]);
break;
default:
return state;
}
}
评论对象如下所示:
"data":{
"data":[
{ id: '', comment: '', liked: false },
{ id: '', comment: '', liked: false },
{ id: '', comment: '', liked: false },
{ id: '', comment: '', liked: false }
],
"cursor":"CkUKEQoEZGF0ZRIJCNrwhcWhvdUCEixqFGRldn5kZXZlbG9wbWVudC0xMzAwchQLEgdDb21tZW50GICAgLSe_-cKDBgAIAE=",
"more":false,
"count":4
},
答案 0 :(得分:0)
您正在使用过滤器功能,语法正确,尽管您的reducer应该返回带有该特定注释的所有注释,其中您喜欢的键值对为true,这样您就可以继续使用相同的地图功能。
import * as types from '../actions/actionTypes';
import initialState from './initialState';
export default function commentReducer(state = initialState.comments, action) {
switch (action.type) {
case types.ADD_COMMENT_LIKE_SUCCESS:
const content = Object.assign({}, state);
content.data = content.data.map(comment => {
const newObj = {...comment};
if(newObj.id === action.commentId)
{
newObj.likeKey = true;
}
return newObj;
});
console.log(content);
return content;
default:
return state;
}
}
Map functin将返回您到目前为止的所有评论,并更改该特定评论对象。希望这会有所帮助。
答案 1 :(得分:0)
我会使用find代替过滤器,因为它总是只返回一个项目。
我不完全确定你如何分裂你的州,但我建议你回复:
import * as types from '../actions/actionTypes';
import initialState from './initialState';
export default function commentReducer(state = initialState.comments, action) {
switch (action.type) {
case types.ADD_COMMENT_LIKE_SUCCESS:
const otherComments = state.data;
const likedComment = state.data.find(comment => (
comment.id === action.commentId
));
const index = state.data.indexOf(likedComment);
return {
...state,
data: {
[
...otherComments.slice(0, index),
{ ...likedComment, liked: true }, //Override properties here
...otherComments.slice(index + 1)
]
}
};
default:
return state;
}
}
由于我没有修改状态,所以不需要来自州的复制内容。
基本上我是' m:
state
并覆盖data
密钥... likedComment
连接,但使用覆盖数据