У меня есть три иконки с текстом, который должен увеличиваться на каждом при нажатии, который обрабатывает мои реакции на сообщение. Идея состоит в том, что я могу щелкнуть одну реакцию за раз, и двойной щелчок по реакции возвращает к предыдущему состоянию обычным образом, как работает реакция на сообщения. Я наметил шаги, которые нужно предпринять, я создал свои действия и сделал основы для редукторов, но на данный момент я не знаю, как действовать.
Это шаги:
В избыточном хранилище сохраните данные для каждой карты внутри карты, состояние по умолчанию для всех исходных данных на карте.
Заполните вид элементами с карты
При обновлении реакции запускайте действие, которое принимает элемент Id
и ключ reaction
(который является объектом) с типом и значением
Редуктор потребляет данные от действия и находит предмет по Id
5. Обновить данный тип реакции элемента
reducers.js
import { DISLIKE_REACTION, LIKE_REACTION, MAYBE_REACTION } from './actionTypes';
const INITIAL_STATE = {
reactionFlow: new Map(),
};
/**
* Creates a Javascript Map for each card as an object mapped by id
*
* @param {Array} reactions - array of user reaction objects
* @return {Map} - the new reaction list
*/
function generateItemMap(reactions) {
const setOfReactions = new Map();
reactions.forEach(reaction => {
const { _id } = reaction;
setOfReactions.set(_id, reaction);
});
return setOfReactions;
}
/**
* Updates the given reaction type of the item
*
* @param {Object} reaction - the reaction object with a type and value
* @param {Map} type - the type of reactions
* @return {Map} - the updated user reaction
*/
function updateReactionType(reaction, type) {
const { _id } = reaction;
const newType = new Map([...type.entries()]);
newType.set(_id, reaction);
return newType;
}
export default (state = { ...INITIAL_STATE }, action) => {
switch (action.type) {
case LIKE_REACTION: {
return {
...state,
};
}
case DISLIKE_REACTION: {
return {
};
}
case MAYBE_REACTION: {
return {
...state,
};
}
default:
return state;
}
};
actions.js
/**
* Triggers request to like or unlike post
*
* @function
* @return {Object} The {@link actionTypes.LIKE_REACTION LIKE_REACTION}
* action.
*/
export const likeReaction = () => ({
type: LIKE_REACTION,
});
/**
* Triggers request to dislike post or reverse dislike
*
* @function
*
* @param {Object} payload - the data sent with the action
* @return {Object} The {@link actionTypes.DISLIKE_REACTION DISLIKE_REACTION}
* action.
*/
export const dislikeReaction = payload => ({
payload,
type: DISLIKE_REACTION,
});
/**
* Triggers request to maybe post or reverse maybe
*
* @function
*
* @param {Object} payload - the data sent with the action
* @return {Object} The {@link actionTypes.MAYBE_REACTION MAYBE_REACTION}
* action.
*/
export const maybeReaction = payload => ({
payload,
type: MAYBE_REACTION,
});
компонент
<span>
<Icon type={type} />
{text}
</span>
);