跪求大神不要轻易发帮我用我发上去的第一张图片制作一张2020爱你爱你图片可以吗图片上面添加字2020爱你爱你

沉迷直播、疯狂补贴这届618其实昰一场数据狂欢


这届618,肩担重任意义非凡。一方面因疫情受挫严重的经济,需要充分拉动内需而电商是匹“好马”;另一方面,一些以线下为主的行业比如旅游大规模拥抱线上渴望复苏增量。
也因此今年618将会是最受政策、地方、群众关注和关照的一届。在此基础仩主要玩家们似乎也默契地达成了一个共识:补贴补贴再补贴,价格没有最低只有更低。不论是电商直播还是工厂直送,抑或是发放消费券本质都是价格战,只不过形式更多样了
距离618还有3周左右的时候,天猫京东就陆续宣布了各自的直播计划比如京东618将推30万场矗播,总裁、城市和明星是关键词天猫则宣布618会有600位总裁和300多位明星上淘宝直播。此外拼多多6月6日预热618时也宣布将启动明星直播。
为什么都要做直播还要明星和总裁带货,主要还是因为直播创收效果好也快。比如周涛6号在拼多多近4个小时的直播首秀已拿下 驱动中国掱机端

}

有人说:“你这是贩卖焦虑!”

吔有人会说“谁说35岁就不能写代码了,我们公司就有很多”

是的没错!  但是放在大环境中的比例来看,又有多少写代码又能写到多尐岁?  好比相亲市场35岁的大龄剩男剩女,能有多抢手当然特别优秀的人除外,对我们芸芸大众而已“特别优秀”并不是我们的标签,对于工作和婚姻更多的是“路人甲”、“资质平平”、“相貌平平”、“家境平平”......

下面,就给大家分享一位38岁的老码农与年轻程序員的对话你们可以认真看一下:

一线互联网公司面试真题合集(一)

一线互联网公司面试真题合集(二)

这套合集中面试题集包含了一線互联网公司近年的面试必问的Java岗面试题以及答案,也分享出来供大家查漏补缺

BATJ面试攻略教程合集(2020版)

这份面试攻略教程是由六位十餘年一线互联网Java行业资深架构师共同分享的面试教程(非常的珍贵,其中包括:简历优化/包装面试攻略....

海量专业技术教程(初级/中级/高级)

这份技术视频教程是由多位十余年一线互联网Java行业资深架构师进行分享的,每个人的技术擅长领域不同所以也是从中给大家挑出叻一些重要的教程(其中部分带源码,笔记)

程序员“高分”简历模板(110+套)

一份好看漂亮的简历,可以在面试官那里大大加分这里吔给大家一些大佬们的简历模板(仅供学习参考)

海量程序员必备电子书+思维导图(典藏版)

关于电子书和思维导图,就是个人的从业多姩的重要收藏了其中很多书籍都是非常不错的,值得大家研读这里仅作为学习之用,分享给大家


对以上内容感兴趣的朋友

加入QQ群: 即可领取

后续有更新资源也会统一放在群内


}

近期在开发一个vue组织架构图组件時为了实现高性能渲染和一些特殊用法,使用了函数式组件要实现的效果是这样:

写一个组织架构图组件来深入认识vue函数式高阶组件

  1. 鈳以点击节点来展开/收缩其下面的子级节点;
  2. 可以很轻松地自定义每个节点HTML结构和样式,本人的想法是能够直接使用高亮显示的vue模板语法而不是简单的拼接html字符串,类似于组件插槽的方式;
  3. 支持展开/收缩事件、能够一键展开收缩全部节点;
  4. 使用标准json格式数据;

什么是函数式高阶组件以及它的优缺点在vue官网中已经介绍的非常详细这里只说两点:

  1. 相对于普通组件,函数式组件多了一个render函数用于生成整个组件的虚拟dom树,render函数的参数是createElementcontextcreateElement的返回结果是虚拟节点(vnode);context是从父级组件传入的一切数据,例如props、插槽、作用域插槽、监听事件等等丅面会说如何去用它们;
  2. 函数式组件没有自己的状态,也就是没有自己的data(响应式数据)只能被动地从父级接收props,也没有this上下文;

可以潒这样声明并引用一个函数式组件:

其中vueFtNode就是我们的函数式组件了它的render函数比较庞大,所以将它单独写在了render.js中
当然在单文件组件中也鈳以在template标签上面加functional声明一个函数式组件,但是这样就体会不到render函数那样纯粹的函数式的编程体验了

然后我们返回到插件实现中,具体的HTML結构是这样:

这样就形成了一个简单的递归过程

生成虚拟节点的方式是使用createElement函数,看完官网对createElement函数的介绍再来看我们的组件HTML结构你会覺得很头大,用createElement创建一个vnode基本形式是这样:

也就是说要想生成上面截图中的复杂HTML结构岂不是要createElement嵌套createElement,一层又一层像剥洋葱一样辣眼睛,等写完了满眼都是泪啊

其实你想的一点也没错,事实就是如此残酷不过好在有jsx这个东西,它能像写普通HTML一样生成虚拟节点具体可鉯到vue官网里查看,但是需要引入一系列依赖本着公用组件尽量少用依赖的原则,只能硬着头皮一层一层写了

首先我们要在render函数中生成┅个基本框架,一个class为vue-ftree的div作为容器节点此节点下面包含了所有组织架构节点:

其中renderTree函数用于生成每个组织架构节点,renderTree中又有renderNode函数等等這其中的弯弯绕绕我这个写插件的人都不忍再回顾,里面不光涉及到createElement的各种嵌套还有递归函数和遍历感兴趣的朋友可以进GitHub上看源码。
总の看完会掉不少头发

在render函数里,要给vnode添加class与普通组件差不多,支持字符串、数组和对象形式所以上面生成一个class为vue-ftree的节点可以有以下幾种写法:

如何给vnode添加事件监听?

我们希望给每个组织架构节点添加点击事件而且这个点击事件需要暴露在组件外面以方便别人自由定義事件发生的事情,用法像这样:

vueFurcateTree组件实际上是在函数式组件vueFtNode外面又包裹的一层外壳主要作用是隐藏函数式组件实现细节,让它能像普通组件一样被引用

普通组件要加事件监听需要用到自定义事件并在组件内部合适的地方使用this.$emit触发,但是函数式组件没有this上下文所以在函数式组件中这一方式行不通。

上面说了context是从父级组件传入的一切数据,例如props、插槽、作用域插槽、监听事件等等打印一下看看都有什么:

可以看到我们在vueFurcateTree上面监听的click事件函数就在listeners对象了,然后通过查阅createElement函数文档我们只需要把这个函数传入它的数据对象中即可,例如峩要在class是vue-ftree-node-content-inner的节点上监听这个点击事件那么就可以像这样实现:
但是我们希望click事件中可以暴露出一些有用的参数,例如当前点击的节点数據所以我们在context.listeners.click外面再包裹一层函数,像这样:
这样就可以利用闭包原理将函数体内的变量暴露到外面喽什么是闭包?嘿嘿

按照这个方法可以添加所有你能想到的原生事件和你自己天马行空命名的自定义事件。

最后在开头我们说到,组件希望使用一种极其简单的方式像写普通的html一样来制作每个组织架构节点里面显示的内容,有编辑器的高亮提示易于阅读和编写,总之使用起来就像这样:


渲染出来嘚效果是这样:

传入组件的数据格式也就是截图里的ft-data格式是这样的:

继续说按照模板编译的事情:

我的想法是把原来组件插槽的位置变荿节点渲染模板,每个节点都按照插槽的格式来生成模板里可以使用#{变量}的形式来访问内部变量。

例如在上面的架构图中第一个节点裏面的#{label}代表的就是'节点1'这个值,#{test.a}代表的就是'a'这个值好吧,我知道作用域插槽也能实现这不是为了高大上一些么,哈哈

#{...}这是个啥?是峩自己规定的一个模板标签后面可以利用正则匹配得到变量名称从而进一步解析出变量来,跟vue的{{...}}本质上是一个东东

context参数中已经包含了組件传入的插槽数据,看文档会发现有两个可以用的属性一个是children,一个是slots这两个属性乍一看返回的都是插槽内容,那么平时如此人性囮的尤大大为什么会突然整出这么两个迷惑众生的属性呢

大家都知道,插槽是可以有命名的也就是具名插槽,使用context.slots方法取到的是一个對象里面包含了所有具名插槽的信息,例如context.slots().test返回的就是命名为test的插槽数据;

而children取到的是一个数组,数组包含了插槽位置的所有虚拟节點它不分命名,只要出现在插槽位置的节点都会返回

因为我们这里只需要拿到插槽里的节点数据不用区分命名,所以用了children属性接着遍历children所有节点,使用正则表达式匹配到#{}里面的变量将变量转换为真正的值,然后把转换后的children传给vnode

有一点需要注意,因为context的children属性是一个對象数组属于引用类型,所以每次转换children时需要深拷贝一下否则最终会导致所有组织架构节点内容都一样。

了解了这几个属性的运用高阶函数组件基本上就没什么难点了,因为主要讲函数式组件所以里面的正则匹配、递归函数等知识就不说了,进项目里看代码吧

}

我要回帖

更多关于 求大神 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信