-
开发组件库,Element 源码用的都是 render
-
封装一些高阶组件。组件里面嵌套组件就是高阶组件,前提是要满足组件三要素:
props
、event
、slot
-
用于处理一些复杂的逻辑判断。如果我们一个组件里面有很多
v-if
判断的话,用模板就显得不合适了,这个时候可以用渲染函数来轻松处理
===========================================================================
捕获一个来自子孙组件的错误时被调用。有时候当我们想收集错误日志,却不想把错误暴露到浏览器控制台的时候,这很有用。下面是个例子:
Child.vue
Parent.vue
关于 errorCaptured 更多说明,请 移步官网->
====================================================================
通过 v-once
创建低开销的静态组件。渲染普通的 HTML 元素在 Vue 中是非常快速的,但有的时候你可能有一个组件,这个组件包含了大量静态内容。在这种情况下,你可以在根元素上添加 v-once
特性以确保这些内容只计算一次然后缓存起来,就像这样:
用户协议
… a lot of static content …
只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。关于 v-once
更多介绍,请 移步官网->。
========================================================================
作用域插槽。vue@2.5.0
版本以前叫 scope
,之后的版本用 slot-scope
将其代替。除了 scope
只可以用于 <template>
元素,其它和 slot-scope
都相同。
用过 Element 组件的同学都知道,当我们在使用 <el-table>
的时候会看到如下代码:
Element@1.4.x
的版本:
<el-button
size=“small”
@click=“handleEdit(scope.$index, scope.row)”>编辑
<el-button
size=“small”
type=“danger”
@click=“handleDelete(scope.$index, scope.row)”>删除
但在 2.0
之后的版本替换成了 slot-scope
。
Element@2.0.11
:
<el-button
size=“mini”
@click=“handleEdit(scope.$index, scope.row)”>编辑
<el-button
size=“mini”
type=“danger”
@click=“handleDelete(scope.$index, scope.row)”>删除
说白了,slot-scope
相当于函数的回调,我把结果给你,你想怎么处理就怎么处理,一切随你:
function getUserById (url, data, callback) {
$.ajax({
url,
data,
success: function (result) {
callback(result)
}
})
}
// 使用
getUserById(‘/users’, { id: 1 }, function (response) {
// 拿到数据并开始处理自己的页面逻辑
})
下面我们来简单模拟下 <el-table>
组件内部是怎么使用 slot-scope
的,看代码:
模拟的 <el-table>
组件:
// 定义模板
let template = `
{{ item.name }}
`
Vue.component(‘el-table’, {
template,
props: {
data: Array,
default: []
}
})
在你需要的地方使用
<el-table>
组件:HTML:
{{ scope.row.name }}
{{ scope.row.name }}
JavaScript:
new Vue({
el: ‘#app’,
data: {
userData: [
{id: 1, name: ‘张三’, isActived: false},
{id: 2, name: ‘李四’, isActived: false},
{id: 1, name: ‘王五’, isActived: true},
{id: 1, name: ‘赵六’, isActived: false},
]
}
})
CSS:
.red {
color: red
}
你可以狠狠的 戳这里 查看上面的效果!最后,我们再使用 render 函数来重构上面的代码:
JavaScript:
//
<el-table>
组件Vue.component(‘el-table’, {
name: ‘ElTable’,
render: function (h) {
return h(‘div’, {
class: ‘el-table’
}, this.$slots.default)
},
props: {
data: Array
}
})
//
<el-table-column>
Vue.component(‘el-table-column’, {
name: ‘ElTableColumn’,
render: function (h) {
// 定义一个存放 li 元素的数组
let lis = [],
// 获取父组件中的 data 数组
data = this.$parent.data
// 遍历数组,也就是上面的
v-for
,生成<li>
标签//
this.$scopedSlots.default
获取的就是上面 slot-scope 作用于插槽的部分,// 并把
{ row: item }
传给上面的scope
变量data.forEach((item, index) => {
let liEl = h(‘li’, {
key: item.id
}, [ this.$scopedSlots.default({ row: item }) ])
// 把生成的 li 标签存到数组
lis.push(liEl)
})
return h(‘ul’, {
class: ‘el-table-column’
}, lis)
}
})
在你的页面这样来使用:
HTMl:
{{ scope.row.name }}
{{ scope.row.name }}
JavaScript:
new Vue({
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
React
-
介绍一下react
-
React单项数据流
-
react生命周期函数和react组件的生命周期
-
react和Vue的原理,区别,亮点,作用
-
reactJs的组件交流
-
有了解过react的虚拟DOM吗,虚拟DOM是怎么对比的呢
-
项目里用到了react,为什么要选择react,react有哪些好处
-
怎么获取真正的dom
-
选择react的原因
-
react的生命周期函数
-
setState之后的流程
-
react高阶组件知道吗?
-
React的jsx,函数式编程
-
react的组件是通过什么去判断是否刷新的
-
如何配置React-Router
-
路由的动态加载模块
-
Redux中间件是什么东西,接受几个参数
-
redux请求中间件如何处理并发
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
[外链图片转存中…(img-D7oadnXZ-1710695041923)]React
-
介绍一下react
-
React单项数据流
-
react生命周期函数和react组件的生命周期
-
react和Vue的原理,区别,亮点,作用
-
reactJs的组件交流
-
有了解过react的虚拟DOM吗,虚拟DOM是怎么对比的呢
-
项目里用到了react,为什么要选择react,react有哪些好处
-
怎么获取真正的dom
-
选择react的原因
-
react的生命周期函数
-
setState之后的流程
-
react高阶组件知道吗?
-
React的jsx,函数式编程
-
react的组件是通过什么去判断是否刷新的
-
如何配置React-Router
-
路由的动态加载模块
-
Redux中间件是什么东西,接受几个参数
-
redux请求中间件如何处理并发
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
-