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 )
}};