【umiJS】在非组件中调用 dispatch

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【umiJS】在非组件中调用 dispatch相关的知识,希望对你有一定的参考价值。

参考技术A 这需要在request.ts中调用umiJS的dispatch函数。脱离了hock文件使用dva的dispatch函数,怎么搞?

可以用过 umi 暴露的 getDvaApp 方法获取 dva 实例,再获取 dispatch 方法,如下所示:

UWP 在非UI线程中更新UI

大家都知道,不可以在 其他线程访问 UI 线程,访问 UI 线程包括给 依赖属性设置值、读取依赖属性、调用方法(如果方法里面修改了依赖属性)等。一旦访问UI线程,那么就会报错,为了解决这个问题,需要使用本文的方法,让后台线程访问 UI 线程。

本文提供三个方法可以让其他线程访问 UI 线程

第一个方法是比较不推荐使用的,可能出现 win10 uwp Window.Current.Dispatcher中Current为null

await Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.High,
() =>
{
     //需要访问 ui 的代码
});

 

请注意,这里使用了 CoreDispatcherPriority ,表示优先级,请不要在这里使用 High ,一般都是使用比较低的优先

为何不设置为 High ,参见 CoreDispatcherPriority

那么比较推荐的一个方法是在一个用户控件或者Page之类的,如果在里面使用了异步线程需要访问 ui 的属性,那么可以使用下面代码

await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => 
{
      //UI code here
});

 

如果是写在其他类,没有 Dispatcher ,那么可以使用下面的代码

await Windows.ApplicationModel.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => 
{ 
    //代码 
}); 

 


上面两种方法都写在堆栈网 https://stackoverflow.com/a/38175976/6116637

https://stackoverflow.com/questions/7401538/simple-example-of-dispatcherhelper

https://stackoverflow.com/questions/38149767/uwp-update-ui-from-task

 

以上是关于【umiJS】在非组件中调用 dispatch的主要内容,如果未能解决你的问题,请参考以下文章

在非组件/指令类中取消订阅 Observable

在 umijs 项目中使用 Monaco Editor 的配置

UmiJS简单介绍及使用UmiJS开发结构浅析

Vuejs - 在非父子组件之间交换信息

Vuejs - 在非父子组件之间交换信息

[第25期] 深入解析EventLoop和浏览器渲染帧动画空闲回调的关系 & 精读@umijs/use-request源码