Tengo pruebas unitarias para mi reducers. Sin embargo, cuando estoy depurando en el navegador, quiero comprobar si mis acciones se han llamado correctamente y si el estado se ha modificado en consecuencia.
Estoy buscando algo como:
window._redux.store
... en el navegador para poder escribir eso en la consola y comprobar cómo van las cosas.
¿Cómo puedo lograrlo?
javascript
reactjs
redux
André Pena
fuente
fuente

LogMonitorde visualizar sus acciones y estados resultantes.Respuestas:
Cómo ver la tienda redux en cualquier sitio web, sin cambios de código
Actualización Nov 2019
Las devtools de reacción han cambiado desde mi respuesta original. La nueva
componentspestaña en las herramientas de desarrollo de Chrome todavía tiene los datos, pero es posible que tenga que buscar un poco más.Componentspestañastoreque se muestrestore(para mí fue el 4to nivel)$r.store.getState()Respuesta original
Si usted tiene las herramientas para desarrolladores reaccionar correr puede utilizar
$r.store.getState();con ningún cambio en el código base .Nota: Primero debe abrir la herramienta de reacción de desarrollo en la ventana de herramientas de desarrollador para que esto funcione, de lo contrario, obtendrá un
$r is not definederror$r.store.getState();o$r.store.dispatch({type:"MY_ACTION"})en tu consolafuente
statecomo una propiedad en su componente raíz. Si sigue las instrucciones y tiene<Provider>como componente de nivel superior, esto funcionará bien. ¡Simplemente me mordió moviéndolo!$r.state.store.getState()$rrefiere al componente seleccionado actualmente en laComponentssección de Herramientas de desarrollo. No parecen ser capaces de acceder a la totalidad delstoremedio$r, tal vez porque estoy usando ganchos en todas partes, pero puedo ver la parte de la tienda que mi componente puede ver, que es casi tan bueno, ya veces más a la ¡punto!$r.hooks[0].subHooks[0].subHooks[0].value.store.getState()funciona para aquellos componentes queuseSelector... Ob., YMMV dependiendo de los ganchos que use ...$r.props.storelet store = createStore(yourApp); window.store = store;Ahora puede acceder a la tienda desde window.store en la consola de esta manera:
window.store.dispatch({type:"MY_ACTION"})fuente
window.store.getState()Puede utilizar un middleware de registro como se describe en el libro Redux :
/** * Logs all actions and states after they are dispatched. */ const logger = store => next => action => { console.group(action.type) console.info('dispatching', action) let result = next(action) console.log('next state', store.getState()) console.groupEnd(action.type) return result } let createStoreWithMiddleware = applyMiddleware(logger)(createStore) let yourApp = combineReducers(reducers) let store = createStoreWithMiddleware(yourApp)Alternativamente, puede cambiar el registro para agregarlo a una matriz global (su
window._redux) y puede buscar en la matriz cuando necesite información sobre un estado en particular.fuente
La solución recomendada no me funciona.
El comando correcto es:
fuente
Si está utilizando Next JS , puede acceder a la tienda mediante:
window.__NEXT_REDUX_STORE__.getState()También puede enviar acciones, solo mire las opciones que tiene en
window.__NEXT_REDUX_STORE__fuente
En caso de que desee ver el estado de la tienda para la depuración, puede hacer esto:
#import global from 'window-or-global' const store = createStore(reducer) const onStateChange = (function (global) { global._state = this.getState() }.bind(store, global)) store.subscribe(onStateChange) onStateChange() console.info('Application state is available via global _state object.', '_state=', global._state)fuente
Otra respuesta sugiere agregar la tienda a la ventana, pero si solo desea acceder a la tienda como un objeto, puede definir un captador en la ventana.
Este código debe agregarse donde haya configurado su tienda; en mi aplicación, este es el mismo archivo donde
<Provider store={store} />se llama.Ahora puede escribir
reduxStoreen la consola para obtener un objeto ycopy(reduxStore)copiarlo en el portapapeles.Object.defineProperty(window, 'reduxStore', { get() { return store.getState(); }, });Puede envolver esto en un
if (process.env.NODE_ENV === 'development')para deshabilitarlo en producción.fuente
Con las herramientas de desarrollo de react:
const store = [...__REACT_DEVTOOLS_GLOBAL_HOOK__.reactDevtoolsAgent.internalInstancesById.values()].find(e=>e.elementType.name==="Provider").pendingProps.storefuente
Uncaught TypeError: Cannot read property 'values' of undefinederrorEn primer lugar, debe definir la tienda en el
windowobjeto (puede colocarlo en suconfigureStorearchivo):window.store = store;Entonces solo necesitas escribir en la consola lo siguiente:
window.store.getState();Hop esto ayuda.
fuente