Estoy construyendo un proyecto de reacción y tengo un estado inicial.
const WalletContext = React.createContext({ hasExpenses: false, wallets: {}, expenses: [], createWallet: () => {}, addExpense: (data) => {}, }); Estoy tratando de agregar un gasto a las wallets . Un gasto será un objeto en sí mismo y al agregar el gasto, uso la id de la billetera para saber a qué billetera agregarlo.
Hay que actualizar otro código, pero lo que quiero es agregar un gasto a mi billetera y actualizar mi estado. Traté de concatenar ese gasto que tengo en mi action.payload . Esta es una declaración if dentro de mi reductor.
if (action.type === 'ADD') { const updatedHasExpenses = state.expenses.length > 0; state.wallets[action.payload.walletId].concat(action.payload); return { ...state, hasExpenses: updatedHasExpenses, }; }El problema es que cuando trato de obtener estos datos en uno de mis otros componentes, tengo todas mis identificaciones de billetera, pero cada billetera tiene una matriz vacía asociada y no debería ser el caso una vez que agrego a mi billetera con una identificación de billetera un gasto .
Estoy obteniendo la identificación de la billetera. Esto ya lo verifiqué y le estoy proporcionando a mi componente los datos que tengo de mi contexto. Creo que el problema proviene de mi reductor.
Mi billetera es la siguiente...
{ 'someId': [{'title': 'sometitle', 'category': 'somecategory' }] }Mi payload es el siguiente...
{ id: Math.random().toString(), walletId, date, title, category, amount, }Pruebe Object.assign en lugar de concat y agregue billeteras a su declaración de devolución:
if (action.type === 'ADD') { const updatedHasExpenses = state.expenses.length > 0; const wallets = Object.assign(state.wallets[action.payload.walletId], action.payload) return { ...state, hasExpenses: updatedHasExpenses, walets: Object.assign(state.wallets, wallets) };}