0
votes

Réagir à Redux Push Object dans une matrice imbriquée

Comment pousser le nouveau message dans la matrice de connexions de Réducteur? J'ai essayé de trouver une bonne connexion par index puis de le pousser, mais je ne peux pas me rendre au travail. Les connexions Schema sont par exemple: xxx pre>

schéma est par exemple: p> xxx pré>

donc besoin de trouver la connexion droite de la matrice de connexions puis Pour la pousser dans les messages dans cette connexion de cette connexion P>

Code de problème: p>

const messagesReducer = (state = [], action) => {
  switch (action.type) {
    case RECIEVE_CONNECTIONS:
      return action.payload;
    case UPDATE_MESSAGES:
      let index = state.findIndex(
      connection => connection._id === action.update.id
      );
      return [...state, state[index].messages.concat(action.update.message)];
   default:
    return state;
   }
};

export default messagesReducer;


5 commentaires

À quoi ressemble un message? Y a-t-il une propriété unique que vous pouvez utiliser pour l'identifier?


@James J'envoie ce message au backend où il est enregistré et un autre à ce réducteur pour obtenir une mise à jour d'interface utilisateur plus rapide. Lorsque l'utilisateur Ouvrir les messages de la page Recieve_Connections est activé et saisissez tous les messages de la base de données, mais met à jour_messages est pour Mise à jour rapide Redux et UI


@UROSKALAJDZIC Si des messages dans un tableau, appuyez simplement sur celui-ci, au lieu de Concat, comme celui-ci - état [index] .messages.push (action.update.message)


@Uroskalajdzic ah ok, et est état un tableau de connexions?


@James Oui, l'état est une matrimonie de connexions et de messages sont une matrimonie dans les connexions


3 Réponses :


1
votes

Vous ne mettez pas en train de mettre à jour l'état avec cette ligne:

let index = state.findIndex(
  connection => connection._id === action.update.id
);
const conn = state[index];
const messages = [ ...conn.messages, action.update.message ];
const newState = state.slice();
newState[index] = { ...conn, messages };
return newState;


1 commentaires

Merci beaucoup James!



0
votes
const messagesReducer = (state = [], action) => {
  switch (action.type) {
    case RECIEVE_CONNECTIONS:
      return action.payload;
    case UPDATE_MESSAGES:
      // identify the index to update
      const index = state.findIndex(
        connection => connection._id === action.update.id
      );

      // create the new list of messages for the connection
      const messages = state[index].messages.concat(action.update.message)

      // modify the connection at index without modifying state
      const modifiedConnection = Object.assign({}, state[index], { messages });

      // replace the connection at index with the modified connection containing the new message
      return Object.assign([], state, { [index]: modifiedConnection });

   default:
    return state;
   }
};
You were close, but you were adding to the list of connections when you really wanted to be adding to a nested list of messages for a specific connection.

0 commentaires

0
votes

D'accord, je pense que je l'ai eu. Peut-être être un peu verbeux, mais je pense que vous le comprendrez mieux de cette façon. Ceci est également complètement immuable. xxx


2 commentaires

... [MessageAtDD] - Pourquoi créez-vous un tableau seulement pour la diffuser? Il suffit de passer MessageAtDD


Oups, j'avais changé de choses autour et voulait faire ça. Merci.