单击图标时如何在用户对象内设置userId

时间:2019-05-17 17:22:06

标签: javascript reactjs redux

我有一个模拟用户ID,当在我的react组件中单击某个图标时,应该将其保存在users对象的reactions对象中。

下面是一个函数updateUploadReaction,应该为我执行此操作。逻辑是这样的:当单击图标并且users对象中不存在该特定的userId时,它将其设置在user对象中,并加1,再次单击时将其设置为false,减1.到目前为止,这就是我所拥有的,但是每次单击时,它只会不断减去3。我需要确切的操作指南。

这是完整应用程序的linkupdateUploadReactioncomponents/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;
}

1 个答案:

答案 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 )