Reductor interior, dado un objeto de estado:
var state = { "data": [{ "subset": [{ "id": 1 }, { "id": 2 }] }, { "subset": [{ "id": 10 }, { "id": 11 }, { "id": 12 }] }] }Como puede ver, los datos son una matriz anidada, con matrices en cada uno de sus elementos.
Sabiendo que action.indexToUpdate será un índice para datos, quiero actualizar data[action.indexToUpdate].subset a una nueva matriz mediante programación. Por ejemplo, si action.indexToUpdate = 0, data[0] se actualizará desde
[{"id":1},{"id":2}]para
[{"id":4},{"id":5}]Para poder hacerlo tengo:
let newSubset = [{"id":4},{"id":5}] let newState = update(state.data[action.indexToUpdate], { subset: { newSubset, }, })Pero cuando ejecuté esto, devuelve un error:
TypeError: value is undefineden la función de actualización.
He estado mirando la documentación de reacción aquí: https://facebook.github.io/react/docs/update.html pero realmente no pude averiguar cómo hacerlo. ¡Por favor avise!
Su actualización se verá como
var obj = {"state" : { "data": [{ "subset": [{ "id": 1 }, { "id": 2 }] }, { "subset": [{ "id": 10 }, { "id": 11 }, { "id": 12 }] }] }} return update(obj, { "state" : { "data": { [action.indexToUpdate]: { "subset": { $set: [newSubset] } } } } })En caso de que haya otros campos en el subconjunto, pero solo desea cambiar los campos en un índice específico que contiene otras claves, escribiría
return update(obj, { "state" : { "data": { [action.indexToUpdate]: { "subset": { [id]: {$merge: newSubset} } } } } })