Реагировать на Redux, используя объект в initialState - PullRequest
0 голосов
/ 06 мая 2020

У меня есть чат-приложение с кодом ReactJS. Я хочу сделать функцию redux для добавления в список чатов и сообщений. Трудно объяснить, но вот код. Это сокращенная версия кода. Я удалил многие вещи, которые не были связаны между собой, чтобы этот код было легче читать.

import {
    CHAT_UPDATE
} from '../actions/types'

const initialState = {
    conversations: {
        "jack": [
            {
                "sender": "jack",
                "text": "This is hard coded",
                "date": "00:00:00 MN | May 5"
            },
            {
                "sender": "administrator",
                "text": "Noted",
                "date": "00:00:01 AM | May 5"
            }
        ]
    }
}

export default (state = initialState, action) => {
    switch (action.type) {
        case CHAT_UPDATE:
            return {
                ...state,
                conversations: {
                    // HELP
                }
            }
        default:
            return state
    }
}

Как мне сделать функцию обновления, чтобы при отправке действия CHAT_UPDATE - который содержит информацию запрошенного чата и нового сообщения - он добавит его в список разговоров?

Например, при отправке:

dispatch({
    type: CHAT_UPDATE,
    name: 'jack',
    coversation: {
        "sender": "jack",
        "text": "How's your day?",
        "date": "00:00:02 AM | May 5"
    }
})

Я хочу, чтобы новое состояние было

conversations: {
    "jack": [
        {
            "sender": "jack",
            "text": "This is hard coded",
            "date": "00:00:00 MN | May 5"
        },
        {
            "sender": "administrator",
            "text": "Noted",
            "date": "00:00:01 AM | May 5"
        },
        {
            "sender": "jack",
            "text": "How's your day?",
            "date": "00:00:02 AM | May 5"
        }
    ]
}

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Это будет работать !!

return {
    ...state,
   conversations: {
       ...state.converstation,
       [action.name]: [
           ...state.converstation[action.name],
           {
               ...action.coversation
           }
       ]
   }
}
0 голосов
/ 06 мая 2020

Вы должны обновить его таким образом

return {
 ...state,
 [
   ...state[action.name],
   action.coversation,
 ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...