如何在 UMI 应用程序中访问 DVA Store?

How to access DVA Store in UMI application?

嗨,大多数 React 开发人员会发现 dvaJS 和 umiJS 是状态管理和应用程序开发的天堂。 Dva 是基于 elm 的状态管理工具,使用 react-redux 进行状态管理。

问:如何在 UMI 应用程序中访问 DVA Store,在组件外部或没有 connect

问:如何dispatchDVA存储在UMI应用程序中,在组件外部或没有connect

问:如何在UMI应用程序中访问DVA Store,在组件外部或没有connect

答:https://v2.umijs.org/guide/with-dva.html#how-to-access-store-or-dispatch

它说使用:

window.g_app._store

问:如何dispatchDVA存储在UMI应用程序中,在组件外部或没有connect

答:https://v2.umijs.org/guide/with-dva.html#how-to-access-store-or-dispatch

它说使用:

window.g_app._store.dispatch('namespace/action')

奖金:

问:如何get state of DVA 存储在UMI 应用程序中,在组件外部或没有connect

答:https://v2.umijs.org/guide/with-dva.html#how-to-access-store-or-dispatch

它说使用:

window.g_app._store.getState()

可用函数:

asyncReducers: {}
dispatch: ƒ ()
getState: ƒ f()
replaceReducer: ƒ (n)
runSaga: ƒ ()
subscribe: ƒ subscribe(listener)

建议:不要直接使用,写一个导出这些函数的Util。

要在 UMI 应用程序中访问或调度 DVA 存储,您可以在功能组件中使用 DVA 挂钩而无需连接。它只能与 DVA v2.6.x.

一起使用

在功能组件中:

  • 访问商店:
const state = useSelector(state => state)
// If state in DVA store changed, rendered values in "state" can be changed in page too.

const store = useStore()
const state = store.getState()
// If state in DVA store changed, rendered values in "state" won't be changed in page.
  • 调度:
const dispatch = useDispatch()
dispatch({type: "namespace/action", payload: 12345})

作为额外参考,以及那些在使用 react 组件上下文之外搜索访问 dva 应用参考的人:

  • Umi.js v3+
  • 连同 dva 2.6+(根据框架兼容性)

您可以使用 getDvaApp 导出方法:

import { getDvaApp } from 'umi';

const dispatch = getDvaApp()._store.dispatch;

// use the `dispatch`