Estoy usando React Hooks. Este es mi estado:
const [ chats, setChats ] = useState()Y tengo esta matriz en mi estado de "chats":
[ { "messages": [ //I refer this field { "message": "hi", "seen": false, "_id": "61658b533da2d51eace71b31", "user": {"user data"} } ], "users": ["some data"], "avatar": "data", "_id": "61634b62c1a7612f04296335", "type": "private" }, { "messages": [], "users": ["some data"], "avatar": "data", "_id": "616355d7e124771d98426240", "type": "private" } ] Entonces, solo necesito actualizar el campo "mensajes" del elemento "0" de esa matriz de "chat" con este objeto newMessage :
{ "message": "another hi", "seen": false, "_id": "61658f551ccbac34a8d10130", "user": {"some user data"} }Lo intenté con la respuesta más popular, pero solo devuelve el campo "mensajes", y necesito devolver toda la matriz .
Código:
setChats([...chats[currentlyChatIndex].messages, newMessage])Puede mapear sobre la matriz, y si está en el ChatIndex currentlyChatIndex , puede agregar el campo de messages .
const data = [ { "messages": [ { "message": "hi", "seen": false, "_id": "61658b533da2d51eace71b31", "user": "user data" } ], "users": ["some data"], "avatar": "data", "_id": "61634b62c1a7612f04296335", "type": "private" }, { "messages": [], "users": ["some data"], "avatar": "data", "_id": "616355d7e124771d98426240", "type": "private" } ] const addMessage = (index, message) => { return data.map((el, i) => i === index ? {...el, messages: [...el.messages, message]} : el) } console.log(addMessage(0, {message: 'another hi'})) setChats(chats => chats.map((chat, index) => index === currentlyChatIndex ? { ...chat, messages: [...chat.messages, newMessage] } : chat))