接上一篇Flutter状态管理之路(三)
此篇主要介绍flutter_mobx

flutter_mobx

版本:

dependencies:
mobx: ^0.4.0
flutter_mobx: ^0.3.4

dev_dependencies:
build_runner: ^1.3.1
mobx_codegen: ^0.3.11

文档:https://mobx.pub/

概念

对象 说明
Observables 代表响应式状态,可以是普通dart对象,
也可以是一颗状态树,变化会触发reaction
Computed 计算属性,根据多个Observables来源计算出
其应该输出的值,有缓存,不使用会清空,
源改变会触发重新计算,变化也会触发reaction
Actions 响应改变Observables的地方
Reactions 对Action、Observable、Computed三元素响应的地方,
可以是Widget/函数
Observer 上述Reaction的一个具体实现,用于Flutter中包裹需要响应
Observable的子树

概念图(来自mobx.pub):

图来自mobx.pub

使用例子

来自官网 计数器Demo

  1. 定义Store,新建counter.dart
// Include generated file
part 'counter.g.dart';   /// 利用注解解析生成代码// This is the class used by rest of your codebase
class Counter = _Counter with _$Counter;// The store-class
abstract class _Counter with Store {@observableint value = 0;@actionvoid increment() {value++;}
}
  1. main.dart
final counter = Counter(); // 1. 初始化Storevoid main() => runApp(MyApp());class MyApp extends StatelessWidget {// This widget is the root of your application.@overrideWidget build(BuildContext context) {return MaterialApp(title: 'MobX',theme: ThemeData(primarySwatch: Colors.blue,),home: const MyHomePage(),);}
}class MyHomePage extends StatelessWidget {const MyHomePage();@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('MobX Counter'),),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[Text('You have pushed the button this many times:',),// Wrapping in the Observer will automatically re-render on changes to counter.valueObserver(   /// 2. 用Observer包裹 使用counter  会自动建立订阅关系builder: (_) => Text('${counter.value}',style: Theme.of(context).textTheme.display1,),),],),),floatingActionButton: FloatingActionButton(onPressed: counter.increment,   /// 3. 调用Observer的setter方法 通知更新tooltip: 'Increment',child: Icon(Icons.add),),);}
}

图示

flutter_mobx主流程图1.png

关键对象

以上述计数器例子来分析下源码中关键对象

_$Counter

该对象由代码生成器生成,主要实现扩展自定义的dart object的Observable的能力

mixin _$Counter on _Counter, Store { /// Store只是起标识作用的mixin/// _Counter是我们自定义的状态对象final _$valueAtom = Atom(name: '_Counter.value'); /// 根据@observable标识的变量,生成的对应的Atom对象,用于与Reactions实现观察者模式@overrideint get value {/// 属性value的getter  根据@observable生成_$valueAtom.context.enforceReadPolicy(_$valueAtom); /// 用于限制此方法是否能在非Actions和Reactions里调用,默认允许,否则抛出assert异常_$valueAtom.reportObserved();	/// 注册观察者(Reaction)return super.value;		/// 返回值}@overrideset value(int value) {_$valueAtom.context.conditionallyRunInAction(() {/// conditionallyRunInAction 用于判断写入的安全策略和是否包含action的追踪super.value = value;  /// 赋值的地方_$valueAtom.reportChanged();  /// 通知注册在valueAtom里的Observer刷新数据}, _$valueAtom, name: '${_$valueAtom.name}_set');}final _$_CounterActionController = ActionController(name: '_Counter');	/// 根据@action生成,用于记录action调用情况@overridevoid increment() {final _$actionInfo = _$_CounterActionController.startAction(); /// 记录开始try {return super.increment();		/// 真正执行定义的increment方法} finally {_$_CounterActionController.endAction(_$actionInfo); /// 记录完成}}
}

上述代码片段里的_$valueAtom.context是每个Atom里默认取的全局的MainContext,看Atom构造:

class Atom {factory Atom({String name,Function() onObserved,Function() onUnobserved,ReactiveContext context}) =>Atom._(context ?? mainContext,   /// 注意此处,参数不传会使用mainContextname: name, onObserved: onObserved, onUnobserved: onUnobserved);...
}

看下几个重点方法:

  1. _$valueAtom.context.conditionallyRunInAction
void conditionallyRunInAction(void Function() fn, Atom atom,{String name, ActionController actionController}) {if (isWithinBatch) {/// 当在action、reaction里执行时,直接进入此处enforceWritePolicy(atom);  /// 检查写入权限,如是否可在非action外进行写入等fn();			/// 执行真正赋值的地方} else {/// 非 action or transaction 里执行走这final controller = actionController ??ActionController(context: this, name: name ?? nameFor('conditionallyRunInAction'));final runInfo = controller.startAction();  /// 记录action开始try {enforceWritePolicy(atom);fn();} finally {controller.endAction(runInfo);   ///  记录action结束}}}
  1. _$valueAtom.reportObserved()
	/// Atom
void reportObserved() {_context._reportObserved(this);}/// ReactiveContextvoid _reportObserved(Atom atom) {final derivation = _state.trackingDerivation;  /// 取出当前正在执行的reactions or computedsif (derivation != null) {derivation._newObservables.add(atom);  /// 将当前atom绑进derivation里if (!atom._isBeingObserved) {/// 如果atom之前并没有被加入观察,则执行此处atom.._isBeingObserved = true.._notifyOnBecomeObserved();	/// 通知Observable 的所有listener - 其变为被观察状态}}}

上面可以看出,atom被加入到当前reaction(derivation)的监听集合里,即reaction持有了atom,但是atom改变时是需要通知到reaction的,继续看下面

  1. _$valueAtom.reportChanged()
	/// Atomvoid reportChanged() {_context..startBatch()   /// batch计数+1 ,记录当前batch的深度,用来追踪如action执行的深度..propagateChanged(this)	/// 通知注册在atom里的observer(即Derivation)数据改变..endBatch();  /// 执行完毕,batch计数-1并检查batch执行深度是否归0,此处是做了层优化}/// ReactiveContextvoid propagateChanged(Atom atom) {...atom._lowestObserverState = DerivationState.stale;for (final observer in atom._observers) {if (observer._dependenciesState == DerivationState.upToDate) {observer._onBecomeStale();  /// 通知所有注册的即Derivation数据改变}observer._dependenciesState = DerivationState.stale;}}void endBatch() {if (--_state.batch == 0) { /// 优化:当前执行改变的层次没回归0时,跳过最终的reaction响应,只有全部执行完毕才走下面的逻辑 (个人理解:因为是单线程,此处考虑的应该是递归情况,如action里再调用action)runReactions(); /// 通知挂起的reactions 数据改变///  List<Reaction> pendingReactions = [];/// The reactions that must be triggered at the end of a `transaction` or an `action`for (var i = 0; i < _state.pendingUnobservations.length; i++) {/// 这里处理断开连接的observations 如dispose掉final ob = _state.pendingUnobservations[i].._isPendingUnobservation = false;if (ob._observers.isEmpty) {if (ob._isBeingObserved) {// if this observable had reactive observers, trigger the hooksob.._isBeingObserved = false.._notifyOnBecomeUnobserved();}if (ob is Computed) {ob._suspend();}}}_state.pendingUnobservations = [];}}

基本上,_$Counter就是对@observable注解的变量扩展getter、setter方法,getter里将变量对应的atom绑进当前执行的derivation里去;在setter里去通知atom里的_observers集合。

@action注解的方法,则会被包含进_$_CounterActionController控制里,记录action执行情况

但是atom._observers里的元素是什么时候注册的,按照mobx的理念是在reaction里引用过Observable,则自动tracking,所以接下来看Observer

Observer

flutter中作为UI的响应式组件,简单看下类图

mobx_observer.png

如上图,StatelessObserverWidget extends StatelessWidget,框架主要通过ObserverWidgetMixinObserverElementMixin来扩展功能

  1. ObserverWidgetMixin
mixin ObserverWidgetMixin on Widget {String getName();ReactiveContext getContext() => mainContext;Reaction createReaction(Function() onInvalidate, {Function(Object, Reaction) onError,}) =>ReactionImpl(getContext(),onInvalidate,name: getName(),onError: onError,);
}

基本上就是扩展了 1) 创建Reaction 2) 获取mainContext 全局响应式上下文

  1. ObserverElementMixin
mixin ObserverElementMixin on ComponentElement {ReactionImpl get reaction => _reaction;ReactionImpl _reaction;  /// 包裹的响应类ObserverWidgetMixin get _widget => widget as ObserverWidgetMixin;@overridevoid mount(Element parent, dynamic newSlot) {/// 挂载Element 时 创建Reaction_reaction = _widget.createReaction(invalidate, onError: (e, _) {FlutterError.reportError(FlutterErrorDetails(library: 'flutter_mobx',exception: e,stack: e is Error ? e.stackTrace : null,));}) as ReactionImpl;super.mount(parent, newSlot);}void invalidate() => markNeedsBuild();	/// Observable改变时会通知到这里 标脏@overrideWidget build() {Widget built;reaction.track(() {  /// 每次挂载上Element树上会启动reaction的track,在这里面建立在传入的build方法里(即Observer的build属性) 获取过的Observable的关联built = super.build();	/// 调用外部传入的build方法 建立Widget子树});...return built;}@overridevoid unmount() {/// 卸载Element 时 卸载Reactionreaction.dispose();super.unmount();}
}

接下来重点看reaction.track

/// ReactionImplvoid track(void Function() fn) {_context.startBatch();  /// batch次数+1_isRunning = true;_context.trackDerivation(this, fn);  /// 开始追踪这个derivation即此时的reaction_isRunning = false;if (_isDisposed) {_context._clearObservables(this);   /// dispose的话 清理}if (_context._hasCaughtException(this)) {_reportException(_errorValue._exception);  }_context.endBatch();  /// 此处理操作完成}

进入_context.trackDerivation方法

/// ReactiveContext T trackDerivation<T>(Derivation d, T Function() fn) {final prevDerivation = _startTracking(d);  /// 让mainContext开始追踪传入的derivationT result;if (config.disableErrorBoundaries == true) {result = fn();} else {try {result = fn();  /// 这里调用Observer里传入的build函数,里面会调用Observable的getter方法,上面提到的derivation就是这个d,所以atom会注册到这个d里面去d._errorValue = null;} on Object catch (e) {d._errorValue = MobXCaughtException(e);}}_endTracking(d, prevDerivation);  /// 结束追踪return result;}

进入_startTracking(d)

  /// ReactiveContext Derivation _startTracking(Derivation derivation) {final prevDerivation = _state.trackingDerivation;  _state.trackingDerivation = derivation;  /// 将传入的derivation赋值为当前正在追踪的,所以从这之后调用的Observable的getter方法里拿到的都是它_resetDerivationState(derivation); /// 重置derivation状态derivation._newObservables = {};	/// 清空,方便之后的atom加入return prevDerivation;}

进入_endTracking(d, prevDerivation)

  void _endTracking(Derivation currentDerivation, Derivation prevDerivation) {_state.trackingDerivation = prevDerivation;_bindDependencies(currentDerivation);  /// 绑定derivation依赖的Observables}

进入_bindDependencies(currentDerivation)

 void _bindDependencies(Derivation derivation) {final staleObservables =derivation._observables.difference(derivation._newObservables);  /// 取出不一致的observable集合final newObservables =derivation._newObservables.difference(derivation._observables); /// 取出新的observable集合var lowestNewDerivationState = DerivationState.upToDate;// Add newly found observablesfor (final observable in newObservables) {observable._addObserver(derivation);   /// 关键点1 这里将此derivation添加到Observable的_observers集合里,即在这里实现了atom持有derivation// Computed = Observable + Derivationif (observable is Computed) {if (observable._dependenciesState.index >lowestNewDerivationState.index) {lowestNewDerivationState = observable._dependenciesState;}}}// Remove previous observablesfor (final ob in staleObservables) {ob._removeObserver(derivation);}if (lowestNewDerivationState != DerivationState.upToDate) {derivation.._dependenciesState = lowestNewDerivationState.._onBecomeStale();}derivation.._observables = derivation._newObservables.._newObservables = {}; // No need for newObservables beyond this point}

如上关键点1,将derivation里关联的observable拿到,并将derivation注入到每个observable里,这里为止实现了observable和derivation的双向绑定

总结

优点:

  1. observer的组件真正实现按需更新,只有监听的数据发生变化,它才会re-render
  2. 具备Computer计算属性机制,无引用时会自动回收
  3. 使用注解省去了notify等模板代码,简洁
  4. mobx耦合性更低

缺点:

  1. store过多导致无法统一数据源,管理是个问题
  2. 没有时间回溯能力,因为数据只有一份引用
  3. 缺乏中间件机制有效支持
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Nacos在Docker环境下的集群部署

    第一步:准备软件包 git clone https://github.com/nacos-group/nacos-docker.git /software/nacos-docker安装docker-compose 第二步:安装镜像 cd nacos-docker/docker-compose -f example/cluster-hostname.yaml up 修改内存大小 vim env/nacos-hostname.env浏览器访问:htt…...

    2024/4/24 3:15:50
  2. 20. 有效的括号

    20. 有效的括号 难度: 简单 描述:给定一个只包括 (,),{,},[,] 的字符串,判断字符串是否有效。 有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。说明:假设我们的环境只能存储 32 位大小的有符号…...

    2024/4/28 3:33:50
  3. Springboot 使用thymeleaf th:each 遍历展示数据【13】

    展示数据@RequestMapping("/")public ModelAndView index(String keyword) {ModelAndView mav = new ModelAndView("index");List filter = new ArrayList();//没有keyword关键字时,查询全部if(keyword == null || keyword.trim().equals("")){…...

    2024/3/28 20:03:45
  4. 1.6 爬取猫眼网站信息并存储到数据库(Top100榜、最受期待榜、指定影院的影片信息、音乐榜)

    1.Top100榜 import pymysql as mysql import requests from bs4 import BeautifulSoupdef top():# 创建列表,存储片名、上映时间、主演、评分list1 = []list2 = []list3 = []list4 = []# 二维数组删除前面的数据,保证list输出之前是不多余的100个数据list1.clear()list2.clea…...

    2024/3/29 6:58:08
  5. 【剑指Offer】22、二叉搜索树的后序遍历序列

    一、题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 二、代码 版本1: 参考 SevenYears public class Solution {public boolean VerifySquenceOfBST(int [] sequence) {re…...

    2024/3/29 13:58:03
  6. 9、文件内容查阅

    1.less 空格键:向下翻动一页 PgUP:向上翻动一页 PgDn:向下翻动一页 Enter:一行一行的向下前进 / 查找的内容 ,然后Enter,n向下查找,N向上查找 g 跳到文章首页 G 跳到文章末尾 q 离开2.head head -n number 文件 不加number 默认是10行文件3.tail tail -f 文件 tail -n …...

    2024/3/29 13:58:02
  7. Spring-Retry 入门教程

    代码地址 spring-retry 1. 概述 Spring Retry提供了自动重新调用失败操作的能力。这对于错误可能是暂时性的(如暂时性的网络故障)很有帮助。Spring Retry提供了对流程和基于策略的行为的声明性控制,易于扩展和定制。 2. Maven依赖 首先,将依赖项添加到pom.xml中: <prop…...

    2024/3/29 13:58:01
  8. Android 嵌套滑动详解

    参考: Android嵌套滑动讲解简书:https://www.jianshu.com/p/f4763bf8f9ba 方法总结 startNestedScroll : 起始方法, 主要作用是找到接收滑动距离信息的外控件. dispatchNestedPreScroll : 在内控件处理滑动前把滑动信息分发给外控件. dispatchNestedScroll : 在内控件处理完滑…...

    2024/3/29 13:58:00
  9. HTML的学习以及登录框的编写

    HTML简介 HTML称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。 超文本是一种…...

    2024/4/5 8:42:26
  10. 20200119:(leetcode)回文数(3种解法)

    回文数题目基本思路代码实现 题目 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例…...

    2024/4/26 2:29:31
  11. SpringCloud四、Rest微服务案例部门服务提供者。

    ①Rest微服务案例部门服务提供者。第一步:新建microservicecloud-provider-dept-8001看上图,等待进度条完成。创建完成后请回到父工程查看pom文件变化,以及父工程工程目录变化:第二步:pom文件。<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs…...

    2024/3/29 13:57:57
  12. 21. 合并两个有序链表

    21. 合并两个有序链表 难度: 简单 描述:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4代码实现: /*** Definition for singly-linked l…...

    2024/3/29 13:57:56
  13. linux , mysql互为主从复制

    Master-1:192.169.7.242 Master-2:192.169.0.197 MySQL版本:mysql-5.71.mysql配置文件修改及说明分别修改两个节点的mysql,此处修改配置文件为:/etc/my.cnf 修改Master-1如下:# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/…...

    2024/3/29 13:57:55
  14. Python_累加1-10之间个位不是3,5,9的整数

    for循环语句、continue跳转语句的应用 累加1-10之间个位不是3,5,9的整数sum = 0 for i in range(1, 11):if i % 10 == 3 or i % 10 == 5 or i % 10 == 9:continuesum += i print(sum)...

    2024/3/29 13:57:55
  15. python的这些细节知识点你注意了吗?--内置类

    目录内置类的可变类和不可变类 bool()创建bool类型 整形类构造函数的第二个参数(控制转换的进制) 6e2 和 2. 都是浮点数 python序列类型(list,tuple,str) 集合set的两个特点 {}代表一个空的字典而非集合内置类的可变类和不可变类 下面内容基于python3.6.8,python是一门面向对象…...

    2024/3/29 13:57:53
  16. 关于canvas元素和CSS中的flex属性

    canvas元素解析 什么是canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。 画布是一个矩形区域,您可以控制其每一像素。 canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法 创建canvas元素 规定元素的 id、宽度和高度: <canvas id="myCan…...

    2024/3/29 13:57:52
  17. XSSFWorkbook读取excel模板,SXSSFWorkbook导出大数据量 填坑

    使用的POI版本为3.10.1,版本较老项目里遇到需要读取特定模板,然后将数据装载在模板里导出的场景(之前用的都是XSSFWorkbook导出)。但是当你数据量过大时,官方XSSFWorkbook说最多导出65535行,但是个人实际操作后发现远远没到这个数量,两万左右就报OOM(内存溢出)了。因此,…...

    2024/3/29 13:57:52
  18. Linux基本命令和目录结构

    arch显示机器的处理器架构 (1) uname -m显示机器的处理器架构 (2) uname -r显示正在使用的内核版本 dmidecode -q显示硬件系统部件 - (SMBIOS / DMI) hdparm -i / dev / hda罗列一个磁盘的架构特性 hdparm -tT / dev / sda在磁盘上执行测试性读取操作 cat / por…...

    2024/3/29 13:57:50
  19. centos7 升级cmake

    编译cmake文件时,报错:unknown cmake command “CONTINUE” 猜测这是 cmake 版本过低导致的,那么就需要升级 cmake 到更高的版本。下面是升级 cmake 的步骤: 卸载原有通过 yum 安装的 cmake: sudo yum remove cmake下载cmake安装包: wget https://github.com/Kitware/CMa…...

    2024/3/29 6:58:16
  20. xwiki开发指南1-使用XWiki创建FAQ应用

    本文是按照XWiki官网开发指南-FAQ应用创建,自己翻译总结的版本。 此篇含有大量图片,关于XWiki的开发,将在下一篇讲解。 关于XWiki的部署也会单独写一篇基于docker的部署文。 使用XWiki创建FAQ应用 1.首先下载并部署XWiki(之后会补充一个基于docker部署XWiki的教程) 2.找到…...

    2024/3/29 6:58:15

最新文章

  1. .NET 检测地址/主机/域名是否正常

    &#x1f331;PING 地址/主机名/域名 /// <summary>/// PING/// </summary>/// <param name"ip">ip</param>/// <returns></returns>public static bool PingIp(string ip){System.Net.NetworkInformation.Ping p new System.N…...

    2024/4/28 9:09:07
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 游戏引擎架构01__引擎架构图

    根据游戏引擎架构预设的引擎架构来构建运行时引擎架构 ​...

    2024/4/23 6:16:08
  4. 动态规划刷题(算法竞赛、蓝桥杯)--饥饿的奶牛(线性DP)

    1、题目链接&#xff1a;饥饿的奶牛 - 洛谷 #include <bits/stdc.h> using namespace std; const int N3000010; vector<int> a[N];//可变数组vector存区间 int n,mx,f[N]; int main(){scanf("%d",&n);for(int i1;i<n;i){int x,y;scanf("%…...

    2024/4/26 10:49:06
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/28 3:28:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/28 1:22:35
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57