我有一个模拟用户ID,当在我的react组件中单击某个图标时,应该将其保存在users
对象的reactions
对象中。
下面是一个函数updateUploadReaction
,应该为我执行此操作。逻辑是这样的:当单击图标并且users
对象中不存在该特定的userId时,它将其设置在user
对象中,并加1,再次单击时将其设置为false,减1.到目前为止,这就是我所拥有的,但是每次单击时,它只会不断减去3
。我需要确切的操作指南。
这是完整应用程序的link。 updateUploadReaction
在components/home/reducers.js
内
反应对象
{
reactions: {
dislike: {
count: 0,
users: {},
},
like: {
count: 0,
users: {},
},
maybe: {
count: 0,
users: {},
},
},
}
功能
function updateUploadReaction(id, type, uploads) {
const updatedUploads = new Map([...uploads.entries()]);
const upload = updatedUploads.get(id);
const userId = uuid();
uploads.forEach(() => {
if (!userId {
upload.reactions[type].count += 1;
upload.reactions[type]..users[userId] = true;
} else {
upload.reactions[type].count -= 1;
upload.reactions[type].users[userId] = false;
}
});
updatedUploads.set(id, upload);
return updatedUploads;
}
答案 0 :(得分:0)
我认为您可能正在寻找类似的内容,但不确定是否要添加新的userId并将其删除或执行其他操作。也许它是一个userIds数组?我认为这可能有助于您走上正确的轨道:
const upload1 = {
reactions: {
dislike: {
count: 0,
users: { userId: 1 },
},
},
}
const upload2 = {
reactions: {
dislike: {
count: 0,
users: {},
},
},
}
const uploads = [ upload1, upload2 ];
const updateObjectReaction = ( id, type, uploads ) => {
uploads.forEach( upload => {
const { users } = upload.reactions[ type ]
if ( Object.values( users ).includes( id ) ) {
delete users.userId
}
else {
users.userId = id;
}
} );
console.log( { upload1Users: uploads[ 0 ].reactions.dislike.users } )
console.log( { upload2Users: uploads[ 1 ].reactions.dislike.users } )
}
updateObjectReaction( 1, "dislike", uploads )