Una forma alternativa, si usa react-redux y necesita esa acción solo en un lugar O está bien con la creación de un HOC (componente superior o superior, realmente no necesita comprender que lo importante es que esto podría inflar su html) en todos los lugares que necesite ese acceso es usar mergeprops con los parámetros adicionales que se pasan a la acción:
const mapState = ({accountDetails: {stateOfResidenceId}}) => stateOfResidenceId;
const mapDispatch = (dispatch) => ({
pureUpdateProduct: (stateOfResidenceId) => dispatch({ type: types.UPDATE_PRODUCT, payload: stateOfResidenceId })
});
const mergeProps = (stateOfResidenceId, { pureUpdateProduct}) => ({hydratedUpdateProduct: () => pureUpdateProduct(stateOfResidenceId )});
const addHydratedUpdateProduct = connect(mapState, mapDispatch, mergeProps)
export default addHydratedUpdateProduct(ReactComponent);
export const OtherHydratedComponent = addHydratedUpdateProduct(OtherComponent)
Cuando use mergeProps, lo que devuelva se agregará a los accesorios, mapState y mapDispatch solo servirán para proporcionar los argumentos para mergeProps. Entonces, en otras palabras, esta función agregará esto a los accesorios de su componente (sintaxis de mecanografiado):
{hydratedUpdateProduct: () => void}
(tenga en cuenta que la función en realidad devuelve la acción en sí y no la anula, pero lo ignorará en la mayoría de los casos).
Pero lo que puedes hacer es:
const mapState = ({ accountDetails }) => accountDetails;
const mapDispatch = (dispatch) => ({
pureUpdateProduct: (stateOfResidenceId) => dispatch({ type: types.UPDATE_PRODUCT, payload: stateOfResidenceId })
otherAction: (param) => dispatch(otherAction(param))
});
const mergeProps = ({ stateOfResidenceId, ...passAlong }, { pureUpdateProduct, ... otherActions}) => ({
...passAlong,
...otherActions,
hydratedUpdateProduct: () => pureUpdateProduct(stateOfResidenceId ),
});
const reduxPropsIncludingHydratedAction= connect(mapState, mapDispatch, mergeProps)
export default reduxPropsIncludingHydratedAction(ReactComponent);
esto proporcionará lo siguiente a los accesorios:
{
hydratedUpdateProduct: () => void,
otherAction: (param) => void,
accountType: string,
accountNumber: string,
product: string,
}
En general, aunque la desaprobación total que muestran los mantenedores de redux de expandir la funcionalidad de su paquete para incluir tales deseos de una buena manera, lo que crearía un patrón para estas funcionalidades SIN apoyar la fragmentación del ecosistema, es impresionante.
Los paquetes como Vuex que no son tan obstinados no tienen tantos problemas con las personas que abusan de los antipatrones porque se pierden, al mismo tiempo que admiten una sintaxis más limpia con menos repetición de la que jamás podrá archivar con redux y los mejores paquetes de soporte. Y a pesar de que el paquete es mucho más versátil, la documentación es más fácil de entender porque no se pierden en los detalles, como suele ocurrir con la documentación de reduxs.