写Vue有很长一段时间了,除了常规的业务开发之外,也应该思考和反思一下封装组件的正确方式。以弹窗组件为例,一种实现是在需要模板中引入需要弹窗展示的组件,然后通过一个flag变量来控制弹窗的组件,在业务代码里面会充斥着冗余的弹窗组件逻辑,十分不优雅。

本文整理了开发Vue组件的一些技巧,包含大量代码示例。

开发环境

vue-cli3提供了非常方便的功能,可以快速编写一些测试demo,是开发组件必备的环境。下面是安装使用步骤

// 全局安装vue-cli3
npm install -g @vue/cli
vue -V // 查看版本是否为3.x// 安装扩展,此后可以快速启动单个vue文件
npm install -g @vue/cli-service-global// 快速启动demo文件
vue serve demo.vue

如果需要scss,则还需要在目录下安装sass-loader等。

下面是使用vue-cli3可能会遇见的几个问题,更多使用教程可以参考:一份超级详细的Vue-cli3.0使用教程[赶紧来试试!]

自定义入口文件

如果需要(比如需要开发移动端的组件),可以在使用vue serve时自定义html入口文件,在根目录下编写index.html,并确保页面包含#app的dom即可。

引入公共混合文件

通过style-resources-loader在每个文件引入公共样式混合等,参考自动化导入

需要访问Vue全局对象

在某些时候需要放问全局Vue对象,如开发全局指令、插件时

import Vue from "vue"
import somePlugin from "../src/somePlugin"Vue.use(somePlugin)

上面这种写法并不会生效,这是因为vue serve xxx.vue仅仅只能作为快速原型开发的方案,使用的Vue与 import引入的Vue不是同一个对象。一种解决办法是手动指定vue serve的入口文件

// index.js
import Vue from "../node_modules/vue/dist/vue.min"
import placeholder from "../src/placeholder/placeholder"Vue.use(placeholder)new Vue({el: "#app",template: ``,created(){},
})

Vue的组件系统

Vue组件的API主要包含三部分:prop、event、slot

  • props 表示组件接收的参数,最好用对象的写法,这样可以针对每个属性设置类型、默认值或自定义校验属性的值,此外还可以通过type、validator等方式对输入进行验证
  • slot可以给组件动态插入一些内容或组件,是实现高阶组件的重要途径;当需要多个插槽时,可以使用具名slot
  • event是子组件向父组件传递消息的重要途径

单向数据流

参考:单向数据流-官方文档。

父级 prop 的更新会向下流动到子组件中,但是反过来则不行

单向数据流是Vue组件一个非常明显的特征,不应该在子组件中直接修改props的值

  • 如果传递的prop仅仅用作展示,不涉及修改,则在模板中直接使用即可
  • 如果需要对prop的值进行转化然后展示,则应该使用computed计算属性
  • 如果prop的值用作初始化,应该定义一个子组件的data属性并将prop作为其初始值

从源码/src/core/vdom/create-component.js/src/core/vdom/helpers/extract-props.js里可以看见,在处理props的取值时,首先从

function extractPropsFromVNodeData(){const res = {}const { attrs, props } = data// 执行浅拷贝checkProp(res, props, key, altKey, true) || checkProp(res, attrs, key, altKey, false)return res
}//在此我向大家推荐一个前端全栈开发交流圈:582735936  突破技术瓶颈,提升思维能力

在子组件修改props,却不会修改父组件,这是因为extractPropsFromVNodeData中是通过浅复制将attrs传递给props的。

浅复制意味着在子组件中对对象和数组的props进行修改还是会影响父组件,这就违背了单向数据流的设计。因此需要避免这种情况出现。

组件之间的通信

这里可以参考:vue组件通信全揭秘,写的比较全面

  • 父子组件的关系可以总结为 prop 向下传递,事件event向上传递
  • 祖先组件和后代组件(跨多代)的数据传递,可以使用provide和inject来实现

此外,如果需要跨组件或者兄弟组件之间的通信,可以通过eventBus或者vuex等方式来实现。

“绕开”单向数据流

考虑下面场景:父组件将数据通过prop形式传递给子组件,子组件进行相关操作并修改数据,需要修改父组件的prop值(一个典型的例子是:购物车的商品数量counter组件)。

根据组件单向数据流和和事件通信机制,需要由子组件通过事件通知父组件,并在父组件中修改原始的prop数据,完成状态的更新。在子组件中修改父组件的数据的场景在业务中也是比较常见的,那么有什么办法可以“绕开”单向数据流的限制呢?

状态提升

可以参考React的状态提升,直接通过props将父元素的数据处理逻辑传入子组件,子组件只做数据展示和事件挂载即可

<template><div class="counter"><div class="counter_btn" @click="onMinus">-</div><div class="counter_val">{{value}}</div><div class="counter_btn" @click="onPlus">+</div></div>
</template><script>export default {props: {value: {type: Number,default: 0},onMinus: Function,onPlus: Function},};
</script>

然后在调用时传入事件处理函数

<template><div><counter :value="counter2Val" :on-minus="minusVal" :on-plus="plusVal"></counter></div>
</template>
<script>export default {data() {return {counter2Val: 0,}},methods: {minusVal(){this.counter2Val--},plusVal(){this.counter2Val++}}}//在此我向大家推荐一个前端全栈开发交流圈:582735936  突破技术瓶颈,提升思维能力
</script>

很明显,由于在每个父组件中都需要实现on-minuson-plus,因此状态提升并没有从根本上解决问题。

v-model语法糖

Vue内置了v-model指令,v-model 是一个语法糖,可以拆解为 props: value 和 events: input。就是说组件只要提供一个名为 value 的 prop,以及名为 input 的自定义事件,满足这两个条件,使用者就能在自定义组件上使用 v-model

<template><div><button @click="changeValue(-1)">-1</button><span>{{currentVal}}</span><button @click="changeValue(1)">+1</button></div>
</template><script>
export default {props: {value: {type: Number // 定义value属性}},data() {return {currentVal: this.value};},methods: {changeVal(val) {this.currentVal += parseInt(val);this.$emit("input", this.currentVal); // 定义input事件}}
};
</script>

然后调用的时候只需要传入v-model指令即可

<counter v-model="counerVal"/>

使用v-model,可以很方便地在子组件中同步父组件的数据。在2.2之后的版本中,可以定制v-model指令的prop和event名称,参考model配置项

export default {model: {prop: 'value',event: 'input'},//在此我向大家推荐一个前端全栈开发交流圈:582735936  突破技术瓶颈,提升思维能力// ...}

获得组件实例的引用

在开发组件中,获取组件实例是一个非常有用的方法。组件可以通过$refs$parents$children等方式获得vm实例引用

  • $refs在组件(或者dom上)增加ref属性即可

  • $parents获取子组件挂载的父组件节点

  • $children,获取组件的所有子节点

这些接口返回的都是vnode,可以通过vnode.componentInstance获得对应的组件实例,然后直接调用组件的方法或访问数据。虽然这种方式多多少少有些违背组件的设计理念,增加了组件之间的耦合成本,但代码实现会更加简洁。

表单验证组件

通常情况下,表单验证是表单提交前一个十分常见的应用场景。那么,如何把表单验证的功能封装在组件内部呢?

下面是一个表单组件的示例,展示了通过获得组件的引用来实现表单验证功能。

首先定义组件的使用方式,

  • xm-form接收modelrule两个prop
    • model表示表单绑定的数据对象,最后表单提交的就是这个对象
    • rule表示验证规则策略,表单验证可以使用async-validator插件
  • xm-form-item接收的prop属性,对应form组件的model和rule的某个key值,根据该key从model上取表单数据,从rule上取验证规则

下面是使用示例代码

<template><div class="page"><xm-form :model="form" :rule="rule" ref="baseForm"><xm-form-item label="姓名" prop="name"><input v-model="form.name"/></xm-form-item><xm-form-item label="邮箱" prop="email"><input v-model="form.email"/></xm-form-item><xm-form-item><button @click="submit">提交</button></xm-form-item></xm-form></div>
</template><script>import xmForm from "../src/form/form"import xmFormItem from "../src/form/form-item"export default {components: {xmForm,xmFormItem,},data() {return {form: {name: "",email: ""},rule: {name: [{required: true, message: '用户名不能为空', trigger: 'blur'}],email: [{required: true, message: '邮箱不能为空', trigger: 'blur'},{type: 'email', message: '邮箱格式不正确', trigger: 'blur'}],}}},methods: {submit() {// 调用form组件的validate方法this.$refs.baseForm.validate().then(res => {console.log(res)}).catch(e => {console.log(e)})}}}
</script>

接下来让我们实现form-item组件,其主要作用是放置表单元素,及展示错误信息

<template><label class="form-item"><div class="form-item_label">{{label}}</div><div class="form-item_mn"><slot></slot></div><div class="form-item_error" v-if="errorMsg">{{errorMsg}}</div></label>
</template>
<script>export default {name: "form-item",props: {label: String,prop: String},data() {return {errorMsg: ""}},methods: {showError(msg) {this.errorMsg = msg}}}
</script>

然后让我们来实现form组件

  • 通过calcFormItems获取每个xm-form-item的引用,保存在formItems中
  • 暴露validate接口,内部调用AsyncValidator,并根据结果遍历formItems中每个表单元素的prop属性,处理对应的error信息
<template><div class="form"><slot></slot></div>
</template><script>import AsyncValidator from 'async-validator';export default {name: "xm-form",props: {model: {type: Object},rule: {type: Object,default: {}}},data() {return {formItems: []}},mounted() {this.calcFormItems()},updated() {this.calcFormItems()},methods: {calcFormItems() {// 获取form-item的引用if (this.$slots.default) {let children = this.$slots.default.filter(vnode => {return vnode.tag &&vnode.componentOptions && vnode.componentOptions.Ctor.options.name === 'form-item'}).map(({componentInstance}) => componentInstance)if (!(children.length === this.formItems.length && children.every((pane, index) => pane === this.formItems[index]))) {this.formItems = children}}//在此我向大家推荐一个前端全栈开发交流圈:582735936  突破技术瓶颈,提升思维能力},validate() {let validator = new AsyncValidator(this.rule);let isSuccess = truelet findErrorByProp = (errors, prop) => {return errors.find((error) => {return error.field === prop}) || ""}validator.validate(this.model, (errors, fields) => {this.formItems.forEach(formItem => {let prop = formItem.proplet error = findErrorByProp(errors || [], prop)if (error) {isSuccess = false}formItem.showError(error && error.message || "")})});return Promise.resolve(isSuccess)}}}
</script>

这样我们就完成了一个通用的表单验证组件。从这个例子中可以看出获取组件引用,在组件开发中是一个非常有用的方法。

封装API组件

一些组件如提示框、弹出框等,更适合单独的API调用方式,如

import MessageBox from '@/components/MessageBox.vue'
MessageBox.toast('hello)

如何实现制这种不需要手动嵌入模板里面的组件呢?原来,除了在通过在模板中嵌入组件到children挂载组件,Vue还为组件提供了手动挂载的方法$mount

let component = new MessageBox().$mount()
document.getElementById('app').appendChild(component.$el)

通过这种方式,我们就是可以封装API形式调用组件,下面是一个alert消息提示的接口封装

消息弹窗组件

一个消息组件就是在页面指定绘制展示提示消息的组件,下面是简单实现

<template><div class="alert"><div class="alert-main" v-for="item in notices" :key="item.name"><div class="alert-content">{{ item.content }}</div></div></div>
</template><script>let seed = 0;function getUuid() {return 'alert_' + (seed++);}export default {data() {return {notices: []}},methods: {add(notice) {const name = getUuid();let _notice = Object.assign({name: name}, notice);
//在此我向大家推荐一个前端全栈开发交流圈:582735936  突破技术瓶颈,提升思维能力this.notices.push(_notice);// 定时移除,单位:秒const duration = notice.duration;setTimeout(() => {this.remove(name);}, duration * 1000);},remove(name) {const notices = this.notices;for (let i = 0; i < notices.length; i++) {if (notices[i].name === name) {this.notices.splice(i, 1);break;}}}}}
</script>

下面来实现消息组件挂载到页面的逻辑,并对外暴露展示消息的接口

// alert.js
import Vue from 'vue';// 具体的组件
import Alert from './alert.vue';
Alert.newInstance = properties => {const props = properties || {};// 实例化一个组件,然后挂载到body上const Instance = new Vue({data: props,render (h) {return h(Alert, {props: props});}});const component = Instance.$mount();document.body.appendChild(component.$el);// 通过闭包维护alert组件的引用const alert = Instance.$children[0];return {// Alert组件对外暴露的两个方法add (noticeProps) {alert.add(noticeProps);},remove (name) {alert.remove(name);}}
};// 提示单例
let messageInstance;
function getMessageInstance () {messageInstance = messageInstance || Alert.newInstance();return messageInstance;
}
function notice({ duration = 1.5, content = '' }) {// 等待接口调用的时候再实例化组件,避免进入页面就直接挂载到body上let instance = getMessageInstance();instance.add({content: content,duration: duration});
}// 对外暴露的方法
export default {info (options) {return notice(options);}
}

然后就可以使用API的方式来调用弹窗组件了

import alert from './alert.js'
// 直接使用
alert.info({content: '消息提示', duration: 2})
// 或者挂载到Vue原型上
Vue.prototype.$Alert = alert
// 然后在组件中使用
this.$Alert.info({content: '消息提示', duration: 2})

高阶组件

高阶组件可以看做是函数式编程中的组合。可以把高阶组件看做是一个函数,他接收一个组件作为参数,并返回一个功能增强的组件。

高阶组件是一个接替Mixin实现抽象组件公共功能的方法,不会因为组件的使用而污染DOM(添加并不想要的div标签等)、可以包裹任意的单一子元素等等

在React中高阶组件是比较常用的组件封装形式,在Vue中如何实现高阶组件呢?

在组件的render函数中,只需要返回一个vNode数据类型即可,如果在render函数中提前做一些处理,并返回this.$slots.default[0]对应的vnode,就可以实现高阶组件。

内置的keep-alive

Vue内置了一个高阶组件keep-alive,查看源码可以发现其实现原理,就是通过维护一个cache,并在render函数中根据key返回缓存的vnode,来实现组件的持久化。

throttle

节流是web开发中处理事件比较常见的需求。常见的场景有及时搜索框避免频繁触发搜索接口、表单按钮防止在短暂时间误重复提交等

首先来看看Throttle组件的使用方式,接收两个props

  • time表示节流的时间间隔
  • events表示需要处理的事件名,多个事件用逗号分隔

在下面的例子中,通过Throttle组件来控制其内部button的点击事件,此时连续点击多次,触发clickBtn的次数要比点击的次数小(节流函数通过一个定时器进行处理)。

 <template><div><Throttle :time="1000" events="click"><button @click="clickBtn">click {{count}}</button></Throttle></div>
</template>

下面是具体实现,实现高阶组件的主要功能是在render函数中对当前插槽中的vnode进行处理

const throttle = function (fn, wait = 50, ctx) {let timerlet lastCall = 0return function (...params) {const now = new Date().getTime()if (now - lastCall < wait) returnlastCall = nowfn.apply(ctx, params)}
}
//在此我向大家推荐一个前端全栈开发交流圈:582735936  突破技术瓶颈,提升思维能力
export default {name: 'throttle',abstract: true,props: {time: Number,events: String,},created() {this.eventKeys = this.events.split(',')this.originMap = {}this.throttledMap = {}},// render函数直接返回slot的vnode,避免外层添加包裹元素render(h) {const vnode = this.$slots.default[0]this.eventKeys.forEach((key) => {const target = vnode.data.on[key]if (target === this.originMap[key] && this.throttledMap[key]) {vnode.data.on[key] = this.throttledMap[key]} else if (target) {// 将原本的事件处理函数替换成throttle节流后的处理函数this.originMap[key] = targetthis.throttledMap[key] = throttle(target, this.time, vnode)vnode.data.on[key] = this.throttledMap[key]}})return vnode},
}

我们还可以进一步封装,通过debounce函数来实现Debounce组件,可见高阶组件的作用,就是为了增强某个组件而存在的。关于高阶组件的其他应用,可以参考HOC(高阶组件)在vue中的应用。

小结

本文整理了几种实现Vue组件的技巧

  • 以counter计数器组件为例,展示了通过v-model语法糖同步父子组件的方式
  • 以表单验证组件为例,展示了通过获取子组件的实例来封装组件的方法
  • 以全局弹窗组件为例,展示了手动mount挂载组件封装API组件的方式
  • 以throttle节流组件为例,展示了在vue中一种实现高阶组件的方式

在了解Vue的API之后,理解上面的概念都比较轻松,封装组件,除了对于API的熟练度之外,更多地是考察JavaScript基础。Vue入门十分轻松,但是要写好优雅的Vue代码,也是一份不小的学问。

结语

感谢您的观看,如有不足之处,欢迎批评指正。
获取资料???
本次给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。
对web开发技术感兴趣的同学,欢迎加入Q群:???582735936 ???,不管你是小白还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. react详解redux进阶-纯函数-高阶函数 redux开发者工具

    7.1.1redux是什么 1.redux 是一个专门用于做状态管理的js库,(不是react插件库)2.他可以在react. angular,vue 等项目中,但基本与react配合使用(vue一般使用vuex管理状态)3.作用:集中式管理react应用多个组件共享状态 7.1.2什么情况下用redux 1.某个组件的状态,需要让其他组件可…...

    2024/4/26 20:56:17
  2. 详解OpenGL中的各种变换(投影变换,模型变换,视图变换)

    本文一些用于均参考《OpenGL编程指南(第8版)》,有兴趣的同学可以结合一起看。这篇算是整合补充。OpenGL采用的是相机模型,就是把视图变换操作类比为使用照相机拍摄照片的过程,具体步骤如下(这里和红宝书有一些改变): 将准备拍摄的对象移动到场景中指定位置。(模型变换…...

    2024/4/20 16:09:50
  3. React系列---Redux高阶运用

    参考资料&#xff1a;《深入React技术栈》 高阶reducer 高阶函数是指将函数作为参数或返回值的函数&#xff0c;高阶reducer就是指将reducer作为参数或返回值的函数。在Redux架构中&#xff0c;reducer是一个纯函数&#xff0c;它的职责是根据previousState和action计算出新的s…...

    2024/4/20 16:09:49
  4. 高阶API

    1.mixin 作用:定义一些公共的数据和方法,在多个组件都可以进行使用 1.1mixin初体验 // 定义一个Mixin对象(可以放任何东西)const myMixin {data() {return {msg: "张三",}},methods: {hello() {alert("hello,world")}},}const app1 Vue.createApp({// …...

    2024/4/21 12:59:52
  5. 双眼皮眼角肉条多久能消

    ...

    2024/5/5 0:05:06
  6. 整双眼皮的切口在哪

    ...

    2024/4/21 12:59:50
  7. javascript怎么字体_禁用JavaScript后,这些网站会变成这样

    作者&#xff5c;Chris Ashton编译&#xff5c;王强、覃云为什么我们应该重视“noscript”这个话题&#xff1f;首先要澄清一下&#xff0c;提供完整的 noscript 体验和使用 noscript 标签区分页面版本是两回事。我不怎么喜欢 noscript 这个标签&#xff0c;因为它会把你的网页…...

    2024/5/4 23:06:16
  8. react两年经验,常见面试题(自己整理中)

    一、HTML5面试题 webpack和gulp的区别 gulp gulp强调的是前端开发的工作流程&#xff0c;我们可以通过配置一系列的task&#xff0c;定义task处理的事务&#xff08;例如文件压缩合并、雪碧图、启动server、版本控制等&#xff09;&#xff0c;然后定义执行顺序&#xff0c;来…...

    2024/5/4 21:36:55
  9. android蓝牙打印机

    您还未登录&#xff01;|登录|注册|帮助 首页业界移动云计算研发论坛博客下载 更多 reality_jie的专栏 编程的过程是一种微妙的享受 目录视图摘要视图订阅CSDN2013年度博客之星评选 文思海辉第一届在线编程大赛 消灭0回答&#xff0c;赢下载分 订阅CSDN社区周刊…...

    2024/4/21 12:59:48
  10. Flutter 系列二——移动开发技术简介

    原生开发与跨平台技术 原生开发 原生应用程序是指某一个移动平台&#xff08;比如iOS或安卓&#xff09;所特有的应用&#xff0c;使用相应平台支持的开发工具和语言&#xff0c;并直接调用系统提供的SDK API。比如Android原生应用就是指使用Java或Kotlin语言直接调用Android…...

    2024/4/21 12:59:46
  11. 去掉 JavaScript 后,亚马逊这些网站会变成这样

    小编推荐&#xff1a;Fundebug提供JS错误监控、微信小程序错误监控、微信小游戏错误监控&#xff0c;Node.j错误监控和Java错误监控。真的是一个很好用的错误监控费服务&#xff0c;众多大佬公司都在使用。 为什么我们应该重视“noscript”这个话题&#xff1f; 首先要澄清一下…...

    2024/4/21 12:59:45
  12. 北京美容双眼皮一个月做美容

    ...

    2024/4/21 12:59:45
  13. 双眼皮切口中断

    ...

    2024/4/26 9:20:18
  14. 双眼皮前半段没有线条

    ...

    2024/4/21 12:59:44
  15. EasyPR-Java开源中文车牌识别系统工程部署

    EasyPR-Java基于JavaCV(JNI封装OpenCV),支持中文,先车牌检测(应用SVM向量机训练样本)再OCR字符(应用ANN人工神经网络) 。用eclipse搭建起了工程,如下步骤: 1、工程搭建 1)下载zip,import到eclipse工程;https://github.com/fan-wenjie/EasyPR-Java 2)下载OpenCV3.0安装并…...

    2024/4/29 22:48:34
  16. 从vue-router浅谈前端路由到前后端分离

    路由 此处的路由指的是页面跳转的规则&#xff0c;通过不同的路径&#xff0c;来请求不同的资源&#xff0c;请求不同的页面是路由的其中一种功能。可以简单理解为url跳转 后端路由 和前端路由的url的访问意义有所不同&#xff0c;所有的url都会访问到服务器上对应的资源。页…...

    2024/4/20 16:10:00
  17. azure服务器_如何使用Blazor WebAssembly实施Azure无服务器

    azure服务器介绍 (Introduction) In this article, we will learn how to implement Azure serverless with Blazor web assembly. And to do that, we will create an app that lists out some Frequently Asked Questions (FAQ) on Covid-19. 在本文中&#xff0c;我们将学习…...

    2024/4/20 16:09:59
  18. 工欲善其事必先利其器之前端篇

    开发工具 Webstorm Webstorm是jetbrains公司旗下一款JavaScript 开发工具。智能的代码补全、格式化、联想查询、代码调试等都被誉为最智能的JavaScriptIDE。支持JavaScript重构、JavaScript单元测试、代码检测和快速修复、JSLint/JSHint、基于 Mozilla的JavaScript调试器。但是…...

    2024/4/20 16:09:58
  19. 一个基本的 go httpserver

    packet main 负责调用main() 只负责启动和关闭server 用到的是&#xff1a; packet app 是真正的服务器应用包 使用了4个packet: "github.com/devfeel/dotweb" "github.com/track/blogserver/pkg/config" "github.com/track/blogserver/pkg/con…...

    2024/4/20 16:09:57
  20. 前后端目录

    【前端】&#xff1a;-------1.基础教程&#xff1a;HTML教程 CSS教程 JavaScript教程 JQuery教程 Bootstrap教程 2.进阶学习&#xff1a;HTML5教程 CSS3教程 JSON教程 AJAX教程 AngularJS教程 Angular2教程 React教程 Less教程 Vue.js教程 Node.js教程 3.拓展阅读&#xff1a;…...

    2024/4/20 16:09:57

最新文章

  1. 【C++基础】缺省参数

    一&#xff0c;缺省参数概念 缺省参数是声明或定义一个函数时为函数的参数指定一个缺省值。 简单来说就是在定义函数的时候可以给形参赋一个初始化的值&#xff0c;这个值就叫做缺省值。 例&#xff1a; void Func(int a0) { cout<<a<<end1; } int main() { Fun…...

    2024/5/5 2:36:18
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. 【opencv】示例-epipolar_lines.cpp 对极线

    这段代码总的功能是使用OpenCV库进行立体视觉的估计。它从命令行读取两个图像文件名&#xff0c;使用SIFT算法检测关键点并计算这些点的描述子&#xff0c;接着通过FLANN库进行快速近似最近邻搜索来找到匹配的关键点。然后使用RANSAC方法计算基础矩阵&#xff0c;找到内点&…...

    2024/5/3 23:22:42
  4. 【自学记录5】【Pytorch2.0深度学习从零开始学 王晓华】第五章 基于Pytorch卷积层的MNIST分类实战

    5.1.2 PyTorch2.0中卷积函数实现详解 1、torch.nn.Conv2d in_channels3: 输入的通道数&#xff0c;对应图像的3个颜色通道。 out_channels10: 输出的通道数&#xff0c;即卷积后我们想要得到的特征图的数量。 kernel_size3: 卷积核的大小&#xff0c;这里使用的是3x3的卷积核…...

    2024/5/3 5:08:24
  5. 职场口才提升之道

    职场口才提升之道 在职场中&#xff0c;口才的重要性不言而喻。无论是与同事沟通协作&#xff0c;还是向上级汇报工作&#xff0c;亦或是与客户洽谈业务&#xff0c;都需要具备良好的口才能力。一个出色的职场人&#xff0c;除了拥有扎实的专业技能外&#xff0c;还应具备出色…...

    2024/5/1 2:36:04
  6. 【外汇早评】美通胀数据走低,美元调整

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

    2024/5/4 23:54:56
  7. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/5/4 23:54:56
  8. 【外汇周评】靓丽非农不及疲软通胀影响

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

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

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

    2024/5/4 23:55:17
  10. 【外汇早评】日本央行会议纪要不改日元强势

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

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

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

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

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

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

    2024/5/4 23:55:16
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

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

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

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

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

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

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

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

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

    2024/5/4 23:55:06
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

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

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

    2024/5/4 2:59:34
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

    2024/5/4 23:55:01
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

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

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

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

    2022/11/19 21:17:18
  27. 错误使用 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
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,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
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:16:58
  45. 如何在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