es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

React Redux no puede insertar un objeto en una matriz anidada.

Estoy intentando insertar un objeto en un objeto particular (es decir, en una lista de objetos). A continuación se muestra el código.

“`import CHATS from ‘../actions/ChatMessages’;
import MESSAGES from '../actions/Messages';
import update from 'immutability-helper';

const chatReducer = (state = [], { type, payload }) => {
switch (type) {
case CHATS:
// state = […state, payload];
// return state;
return state, payload;
case MESSAGES:
let index = state.findIndex(
chat => chat.chatId === payload.chatId);
const conn = state[index];
const messages = […conn.messages, payload];
const newState = state.slice();
newState[index] = { …conn, messages };
//console.log("ne ", newState)
return newState;
default:
return state
};
};

export default chatReducer;
“`

Aquí simplemente estoy encontrando el objeto basado en el id e insertando el payload en el array de mensajes, pero esto no está funcionando.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para insertar un objeto en un objeto en particular (es decir, una lista de objetos), puedes usar la biblioteca immutability-helper de la siguiente manera:

    import update from 'immutability-helper';
    
    const chatReducer = (state = [], { type, payload }) => {
      switch (type) {
        case CHATS:
          return [...state, payload];
        case MESSAGES:
          const index = state.findIndex(chat => chat.chatId === payload.chatId);
          return update(state, {
            [index]: {
              messages: {
                $push: [payload]
              }
            }
          });
        default:
          return state;
      }
    };
    
    export default chatReducer;
    

    En el código anterior, estamos usando el método update() proporcionado por la biblioteca immutability-helper para actualizar el objeto state.

    Dentro del método update(), usamos la sintaxis [index] para seleccionar el objeto en particular cuyo array de messages queremos actualizar.

    Luego, usamos el comando $push para agregar el objeto payload al final del array de messages.

    De esta manera, el objeto state se actualizará de manera inmutable con el nuevo objeto payload insertado en el array de messages apropiado.

Comments are closed.