作者:匿名用户
链接:https://www.zhihu.com/question/325397290/answer/708418099
来源:知乎

事实性错误:

那 vue 呢?它连 HOC 都没有,render props 更不现实(jsx自带)

  1. HOC
const DefaultButton = {
props: {
text: String
},
template: `<button>{{text}}</button>`
} function wrap(comp) {
return {
components: {
comp
},
template: `<comp text=""/>`
}
} new Vue({
components: {
TextButton: wrap(DefaultButton)
},
template: `<text-button />`
})

2. HOC + render props

const DefaultButton = {
props: {
renderText: Function
},
render(h) {
return h('button', this.renderText())
}
} function wrap(comp) {
return {
render(h) {
return h(comp, {
attrs: {
renderText: () => ""
}
})
}
}
} const textButton = wrap(DefaultButton) new Vue({
render(h) {
return h(textButton)
}
})

react 的不可变,纯函数。直接导致 hooks 必须使用 const 关键字,不能是 let,这也是 hooks 的奇迹之一

const keyword 和 "不可变,纯函数" 有什么关系, 若使用 let、var, 是否不能实现hook?

请问:

  1. Hooks对Fiber更好 -> Hooks是Fiber的产物 -> 没有Fiber就不是Hooks

请问怎么用逻辑推理出这条链?

2. 对于你回答中的事实性错误, 你持什么看法?

不知道有没有正确理解你说的“移除一个属性”:

onst DefaultButton = {
props: {
renderText: Function
},
render(h) {
return h('button', this.renderText())
}
} function omitRenderText(comp, render) {
return {
render(h) {
const { renderText, ...others } = this.$attrs
return h(comp, {
attrs: {
...others,
renderText: render || renderText
}
})
}
}
} const textButton = omitRenderText(DefaultButton, () => "") new Vue({
render(h) {
return h(textButton, {
attrs: {
renderText: () => ""
}
})
}
})

如果你觉得这篇文章对你还是有很大帮助的话,不介意的话可以加下我刚刚建立的一个学习交流群,有很多相关资料和学习视频:907694362

如何评价 Vue 的 Function-based Component?的更多相关文章

  1. vue render function

    vue render function https://vuejs.org/v2/guide/render-function.html { // Same API as `v-bind:class`, ...

  2. vue render function & dataset

    vue render function & dataset https://vuejs.org/v2/guide/render-function.html#The-Data-Object-In ...

  3. vue & arrow function error

    vue & arrow function error <template> <div class="home"> <img alt=" ...

  4. vue组件大集合 component

    vue组件分为全局组件.局部组件和父子组件,其中局部组件只能在el定义的范围内使用, 全局组件可以在随意地方使用,父子组件之间的传值问题等. Vue.extend 创建一个组件构造器 template ...

  5. Vue内置的Component标签用于动态切换组件

    html <div id="app"> <component :is="cut"></component> <butt ...

  6. vue.js组件(component)

    简介: 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面 ...

  7. Vue教程:组件Component详解(六)

    一.什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功 ...

  8. [Vue] Parent and Child component communcation

    By building components, you can extend basic HTML elements and reuse encapsulated code. Most options ...

  9. vue学习之组件(component)(二)

    自定义事件 父组件使用 prop 传递数据给子组件.但子组件怎么跟父组件通信呢?这个时候 Vue 的自定义事件系统就派得上用场了. 1. 使用 v-on 绑定自定义事件 每个vue实例都实现了事件接口 ...

随机推荐

  1. 微信小程序实现九宫格切图,保存功能!

    效果如下图: 代码如下: <view class='sudoku'> <scroll-view scroll-x scroll-y class='canvas-box'> &l ...

  2. netty中Pipeline的ChannelHandler执行顺序案例详解

    一.netty的Pipeline模型 netty的Pipeline模型用的是责任链设计模式,当boss线程监控到绑定端口上有accept事件,此时会为该socket连接实例化Pipeline,并将In ...

  3. 仿写vue UI 组件总结 (自己练习,仿照现有的UI组件)

    UI组件 Vue开发插件流程 本来是昨天要写总结的,感觉自己写不好,就放弃了.今天看到了iview和element有一些摩擦,是关于代码借鉴的问题(哈哈),不做评价.谁下生会写组件,我仿(chao)写 ...

  4. spring-boot-plus是易于使用,快速,高效,功能丰富,开源的spring boot 脚手架.

    Everyone can develop projects independently, quickly and efficiently! spring-boot-plus是一套集成spring bo ...

  5. Modbus协议笔记

    读线圈:就是说读开关量输出的状态,看看开关量输出的到底是开着的还是关着的,这样说有点不专业,但是好明白.比如要在上位机显示开关量输出的当状态,就得用这个功能码. 写线圈:就是说读开关量输入的状态,开关 ...

  6. Okhttp 请求流程梳理

    最近在看 Okhttp 的源码.不得不说源码设计的很巧妙,从中能学到很多.其实网上关于 Okhttp 的文章已经很多了,自己也看了很多.但是俗话说得好,好记性不如烂笔头,当你动手的时候,你会发现你在看 ...

  7. python dict(字典)

    补充知识点1: 数据类型的划分:可变数据类型.不可变数据类型 可变数据类型:     元组,bool,int,str      --可哈希 不可变数据类型:  list,dict,set        ...

  8. MySql数据库优化必须注意的四个细节(方法)

    MySQL 数据库性能的优化是 MySQL 数据库发展的必经之路, MySQL 数据库性能的优化也是 MySQL 数据库前进的见证,下文中将从从4个方面给出了 MySQL 数据库性能优化的方法. 1. ...

  9. python3openpyxl库的简单使用

    python3操作表格有很多库,现在主要给大家介绍一下我比较喜欢用的openpyxl库,安装直接pip安装,对pip安装有疑问可以参考我有关于pip使用的文章. wb=Workbook()#新建表格 ...

  10. 初始bat命令

    任务:manven打包的jar包以及相关的bat文件,要将其设置为开机自启动. bat :批处理文件,通过简单的命令行方式对windows进行操作. 简单的bat命令: 1echo 显示命令,@带着个 ...