Tengo una matriz. Estoy escribiendo un código para redux ahora.
const initialState = [{ id: '1', title: '', description: '' }];Me gustaría actualizar esa matriz de esta manera
[{ id: '1', title: '', description: '' },{ id: '2', title: '', description: '' }];y después de copiar quiero actualizar la copia uno de id a '2'
esto es lo que probé
case COPY_QUESTION: { const copyQuestion = state.find(question => question.id === action.payload) copyQuestion?.id = (state.length + 1).toString() return [...state, copyQuestion]; }no funcionó para mí si trato de cambiar la identificación, el índice 0 también cambia al mismo tiempo. como esto
[{ id: '2', title: '', description: '' },{ id: '2', title: '', description: '' }];Realmente agradecería su ayuda gracias por leer esta pregunta.
Algo como esto debería funcionar:
const initialState = [{ id: '1', title: '', description: '' }]; const copyInitialState = [...initialState] copyInitialState.push({ id: parseInt(copyInitialState[copyInitialState.length - 1].id, 10) + 1, title: '', description: '' }) //setStatecopyInitialState es entonces igual a:
[ { id:"1", title:"", description:"" }, { id:2, title:"", description:"" } ]JavaScript maneja los objetos por referencia y, por lo tanto, 'buscar' solo devuelve la dirección en la memoria del objeto ya existente, que luego manipula.
Primero debe clonar su objeto, por ejemplo, usando el operador de propagación (no para clones profundos):
const originalQuestion = state.find(question => question.id === action.payload) const copyQuestion = { ...originalQuestion }Eche un vistazo a esta pregunta SO para obtener más contexto y posibilidades.