Redux вернуть результат нескольких циклов

нужно найти в users и в messages где id равен userId и добавить их в currentMessage

const defaultDialog = {
    users: [
        {id: 1, name: 'Chris Greyson', img: "./img/avatar/avatar4.jpg"},
        {id: 2, name: 'Elaine Dreifuss', img: "./img/Dialogs/avatar5.jpg"},
        {id: 3, name: 'Bruce Peterson', img: "./img/Dialogs/avatar6.jpg"},
        {id: 4, name: 'Carol Summers', img: "./img/Dialogs/avatar7.jpg"},
    ],
    messages: [
        {
            id: 1,
            text: "Lorem ipsum dolor sit amet, amet, consectetu amet, consectetu amet, consectetu consectetur adipisicing elit. Similique, facere eos enim cupiditate at quasi sapiente voluptatum ratione dolorum dignissimos!"
        },
        {
            id: 2,
            text: "Consectetu amet, consectetu consectetur adipisicing elit. Similique, facere eos enim cupiditate at quasi sapiente voluptatum ratione dolorum dignissimos!"
        },
       
    ],
    currentMessage:{
            user:{},
            messages:[]
    }
};
const dialogReducer = (state = defaultDialog, action) =>{
switch (action.type){

case 'GET_MESSAGE_TEXT':
return {...state,
    currentMessage: {
        users: state.users.filter(user =>
            user.id == action.userId && user 
        ),
    ...state,
    currentMessage: {messages: state.messages.filter(message =>
            message.id == action.userId && message 
     )}
   };


    default :
    return state;
  }

Ответы (2 шт):

Автор решения: Август
const dialogReducer = (state = defaultDialog, { type, payload }) => {
    const { users, messages } = state;

    switch (type) {
        case 'GET_MESSAGE_TEXT':
            return {
                ...state,
                currentMessage: {
                    user: users.find(user => user.id === payload),
                    messages: messages.filter(message => message.id === payload )
                }
            };
        default:
            return state;
    }
}

если код рабочий и Вас всё устраивает, то позвольте несколько заметок:

  • в action именуйте свойство полезной нагрузки как payload, вместо userId или что-то еще. это всеобщее соглашение. это не обязательно, но очень удобно
  • не стесняйтесь использовать деструктуризацию
→ Ссылка
Автор решения: Miqayel Petrosyan

Спасибо за ответ, после некоторых изменение заработало

case 'GET_MESSAGE_TEXT':

payload.userId = parseInt(payload.userId)

return {
    ...state,
        currentMessage: {
            users: state.users.find(user => user.id === payload.userId && user),
            messages: state.messages.filter(message => message.id === payload.userId && message )
}};
→ Ссылка