Tengo una función auxiliar a la que llamo cuando quiero eliminar algo de mi tienda redux. Sin embargo, necesito poder acceder a la tienda actual dentro de la función para determinar qué hacer a continuación. Esto es lo que quiero hacer:
export function deleteDocument (id) { this.props.dispatch(deleteShape({id})); const getStore = getStore(); //<-- I need something like this if(getStore.documents && !getStore.documents.find(doc => doc.selected)){ this.props.dispatch(makeTopDocumentSelected()); } }Llamo a esta función desde un componente y le paso el contexto "este" para que tenga acceso al envío si tiene curiosidad al respecto. Pero si trato de hacer referencia a un accesorio que paso, no se actualiza después de la llamada "deleteShape" porque esta función no está "conectada" (por falta de una palabra mejor) a la tienda redux. Entonces mi pregunta es esta: ¿cómo puedo acceder a la tienda redux actual desde funciones que no son componentes? Gracias
Debo decir que creo que es una mala práctica acceder aleatoriamente a la tienda desde alguna función, y pueden ocurrir algunos efectos secundarios, pero si tiene que hacerlo, esta es una forma posible:
archivo: storeProvider.js
var store = undefined; export default { init(configureStore){ store = configureStore(); }, getStore(){ return store; } };archivo: App.js
import { createStore } from 'redux'; import rootReducer from './rootReducer'; import storeProvider from './storeProvider'; const configureStore = () => createStore(rootReducer); storeProvider.init(configureStore); const store = storeProvider.getStore(); const App = () => <Provider store={store} > <Stuff/> </Provider>archivo: sufuncion.js
import storeProvider from './storeProvider'; export function deleteDocument (id) { this.props.dispatch(deleteShape({id})); const state = storeProvider.getStore().getState(); if(state.documents && !state.documents.find(doc => doc.selected)){ this.props.dispatch(makeTopDocumentSelected()); } }