
这个文件就是要扩展$mount:
因为数据选项中可能存在的template和el
先判断options中是否有render,再判断是否有template,最后才判断是否有el;因此得出的结论是render优先级大于template、template优先级大于el
在判断template的时候再判断template中是写的“#app"还是 '<div>template</div>' 节点;最后把template选项处理成 render 函数
如果没有render没有template最后就会执行 mountcall(this, el, hydrating)
因为 const mount = Vueprototype$mount 所以要找Vue
至此 $mount 的浅显功能就清楚了:
看了mountComponent的源码明白了,先执行$mount => 然后执行_render() => 最后执行 _update()(这个才是把虚拟dom变成真实dom的执行者);
另外还应该明白的是一个组件有一个watcher。
这里应该明白$mount有更新有初始化,
patch: 将vnode =》 node
patch 里边有两个分支,一个是初始化,一个是更新
真正实现$mount方法
$mount:生成真是dom,这里边一定会调用render和patch
如果想更近一步了解$mount在初始化和更新环节做了啥请看 vue的diff算法
在以往的工作当中,通常会遇到需要处理 DOM 的时候, DOM *** 作属于一个常规的范畴,我们可能需要通过它绑定一个事件、调整滚动条的位置、管理焦点、文本选择、媒体播放等等。
基于工程页面、逻辑复杂性、复用性等等因素可以选择合适的方案方便我们 *** 作 DOM 。
在页面比较简单和逻辑并不复杂的时候,我们可以根据实际情况选择比较简单的选择器方案;当工程逻辑较复杂的时候,我们要考虑组件的复用性、多人协作的不可控性等多种因素,选择方案的时候往往要考虑更多可能的场景。
如上所述,如果我们的使用场景单一,不需要复用的话,我们可以保证获取的 DOM 一致性的时候,可以考虑使用选择器获取 DOM 。
可以使用 documentgetElementXX 开头的方法:
可使用方法如下:
实际使用场景:
页面逻辑复杂的时候会有复用性的问题,如果使用 id 或者选择器就容易引发问题,这时我们可以选择使用 ref 。
ref 可以获取到相应的 DOM 节点,而且也可以得到详细信息,它得到的一个对象,包括 props,state 等。
React 会在组件挂载时给 current 属性传入 DOM 元素,并在组件卸载时传入 null 值。 ref 会在 componentDidMount 或 componentDidUpdate 生命周期钩子触发前更新。
ref 的值根据节点的类型而有所不同:
React 也支持另一种设置 refs 的方式,称为“回调 refs”。
不同于传递 createRef() 创建的 ref 属性,你会传递一个函数。这个函数中接受 React 组件实例或 HTML DOM 元素作为参数,以使它们能在其他地方被存储和访问。
React 将在组件挂载时,会调用 ref 回调函数并传入 DOM 元素,当卸载时调用它并传入 null。在 componentDidMount 或 componentDidUpdate 触发前,React 会保证 refs 一定是最新的。
父组件想要 *** 作子组件且没有控制权的时候可以选择使用 findDOMNode 。
findDOMNode 只在已挂载的组件上可用(即:已经存在 DOM 中的组件)。如果尝试调用未挂载的组件将会引发异常。
findDOMNode 不能用于函数组件。
如果组件已经被挂载到 DOM 上,此方法会返回浏览器中相应的原生 DOM 元素。此方法对于从 DOM 中读取值很有用,例如获取表单字段的值或者执行 DOM 检测。
当组件渲染的内容为 null 或 false 时,findDOMNode 也会返回 null。当组件渲染的是字符串时,findDOMNode 返回的是字符串对应的 DOM 节点。从 React 16 开始,组件可能会返回有多个子节点的 fragment,在这种情况下,findDOMNode 会返回第一个非空子节点对应的 DOM 节点。
在linux系统中,可以使用mount命令挂载光盘镜像文件、移动硬盘、U盘以及Windows网络共享和UNIX
NFS网络共享等。
命令格式:
mount
[-t
vfstype]
[-o
options]
device
dir
参数说明:
①-t
vfstype
指定文件系统的类型,通常不必指定。mount
会自动选择正确的类型。常用类型有:
光盘或光盘镜像:iso9660
DOS
fat16文件系统:msdos
Windows
9x
fat32文件系统:vfat
Windows
NT
ntfs文件系统:ntfs
Mount
Windows文件网络共享:smbfs
UNIX(LINUX)
文件网络共享:nfs
②-o
options
主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集
③device
要挂接(mount)的设备
④dir设备在系统上的挂接点(mount
point)
案例分析:
光盘镜像文件的挂接(mount)
mkdir /mnt/vcdrom
#建立一个目录用来作挂接点(mount point)
mount -o loop -t iso9660 /home/sunky/mydiskiso /mnt/vcdrom
#使用/mnt/vcdrom就可以访问盘镜像文件mydiskiso里的所有文件
1第一种,最常见vue-cli模板就是这样
import Vue from 'vue'
import App from '/App'
new Vue({
el: '#app', //#app 元素的 outerHTML 是 Vue 模板,该模板可以被编译成 render function。
template: '<App/>',
components: { App }
})
2第二种,这种挂载是直接挂载到入口文件indexhtml 的 id=app 的dom 元素上
new Vue({
router,
store,
})$mount('#app')
3第三种,
new Vue({
router,
store,
render: h => h(App)
})$mount('#app')
4第四种,
new Vue({
el:'#app',
router,
render: h =>h(App)
})
5第五种:
var options = {
el: '#app',
store,
router,
App
};
new Vue(options)
$mount()用于手动挂载
当Vue实例没有el属性时,则该实例尚没有挂载到某个dom中假如需要延迟挂载,可以在之后手动调用vm$mount()方法挂载。
例如:newVue({router,render:h=>h(App)})$mount("#app");
render: x => x(App)// 这里的render: x => x(App)是es6的写法//
转换过来就是: 暂且可理解为是渲染App组件//
render:(function(x){// return x(App);// });
课程目标
理解react的框架使用中,真实dom存在的意义。
使用真实dom和使用虚拟dom的场景。
灵活掌握并能够合理使用 *** 作真实dom的方法。
知识点
react中提供了ref这个属性来获取原生的dom节点,使用方式:在虚拟dom中添加ref属性,即可在组件实例的refs属性中获取该真实dom节点。由于组件实例化的时候,真实dom节点是在最后才生成的。所以,我们获取真实dom节点应该是在componentDidMount这个生命周期中。
class HelloWorld extends Component{
render(){
return <div>
<h1 ref="h">hello world</h1>
</div>
}
componentDidMount(){
consolelog(thisrefsh); // 打印的是h1这个dom节点。
}
}
ref也可以使用在组件标签上使用,此时获取的是该组件标签的组件实例。如下:
class Button extends Component{
render(){
return <button>确定</button>
}
}
let btn = ReactcreateElement()
propsref function
propsref(btn)
class HelloWrold extends Component{
getBtnThis = btn => {
consolelog(btn) // Button组件的第二个组件实例
}
render(){
return <div>
<Button ref="btn"></Button>
/
let btn = new Button()
btnref === typeof function
btnref(btn)
}
findDomNode这个方法可以根据组件实例(每个组件实例都对应的有一段dom节点获取该组)件实例所对应的真实dom节点。该方法的使用如下
/
context 一个组件的组件实例
dom 该组件实例所对应的真实dom节点。
/
const dom = ReactfindDomNode(context);
unmountComponentAtNode该方法的作用是:从 DOM 中移除已经挂载的 React 组件,清除相应的事件处理器和 state。如果在 container 内没有组件挂载,这个函数将什么都不做。如果组件成功移除,则返回 true;如果没有组件被移除1,则返回 false。
const result = ReactunmountComponentAtNode(DOMElement container)
掌握在什么情况下需要真实的dom节点;react的虚拟dom不能实现的原生dom的api的情况,比如:文本框自动聚焦,音频视频相关的api,获取元素的宽高和位置等。基本原则是:能不用真实dom节点尽量不用,实在不能用虚拟dom的时候,才使用真实dom节点。再一种情况是,现有的一些库是针对dom *** 作而构建的,那么想要把这些库和react结合在一起,就必须要使用真实dom节点,比如swiper betterScroll echarts等等。
授课思路
重点参考:
(Good) 如何利用mount命令挂载另一台服务器上的目录
>
1、windows系统中文件夹属性中设置文件共享
2、挂载,linux系统执行共享命令
注意:(使用mount挂载的方法在系统重新启动后就会失效)
usrname:访问共享文件夹的用户名
password:访问密码
ip:共享文件夹所在主机ip
sharename:共享文件夹目录名字
name:需要挂载的linux完整文件夹路径
cifs:Common Internet File System,可以理解为网络文件系统。
3、取消挂载
注意:
name:已经挂载的linux完整文件夹路径
如果umount的时候显示 device busy?
这是因为有程序正在访问这个设备,则可以用:
也可以使用命令ps aux 来查看占用设备的程序PID,然后用命令kill来杀死占用设备的进程,然后再取消挂载
以上就是关于Vue的$mount做了什么全部的内容,包括:Vue的$mount做了什么、React 中 *** 作 DOM 的方法、关于linux中mount的命令等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)