作者:匿名用户
链接: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. python-利用freeze生成requirements文件

    使用场景:本地电脑开发完成的python自动化项目,需要导出python相关的依赖包以便后续迁移项目使用. C:\Users\acer>e: E:\>pip freeze >requ ...

  2. MyBatis 之源码浅读

    环境简介与入口 记录一下尝试阅读Mybatis源码的过程,这篇笔记是我一边读,一遍记录下来的,虽然内容也不多,对Mybatis整体的架构体系也没有摸的很清楚,起码也能把这个过程整理下来,这也是我比较喜 ...

  3. ASP.NET Core 使用 JWT 自定义角色/策略授权需要实现的接口

    目录 ① 存储角色/用户所能访问的 API ② 实现 IAuthorizationRequirement 接口 ③ 实现 TokenValidationParameters ④ 生成 Token ⑤ ...

  4. electron开发环境搭建

    开发环境 Node.js Vscode vscode安装Debugger for Chrome 创建开发目录(也是解决方案) 执行初始化命令,创建electronpicture工程,并添加main.j ...

  5. webpack 4 移除 CommonsChunkPlugin,取而代之的是两个新的配置项(optimization.splitChunks 和 optimization.runtimeChunk

    默认方式 webpack模式模式现在已经做了一些通用性优化,适用于多数使用者. 需要注意的是:默认模式只影响按需(on-demand)加载的代码块(chunk),因为改变初始代码块会影响声明在HTML ...

  6. CPU爆满后的无助感

    告警 晚七点刚好上地铁,握在手里的手机震动了好几下,根据震动这几下的手感已经判断出这是钉钉在告警了,十有八九就是线上的问题,通过Zabbix监控的一台线上服务器已经五分钟不可达,这应该不会是网络网络问 ...

  7. 基于SEER的区块链版赛亚麻将游戏Pre alpha版本内测啦!

    游戏基于SEER测试网络文体平台模块(Culture and Sports Platform,CSP),正在进行数据调试等工作,大家可以尝鲜体验. 此游戏账户和资金等核心系统完全基于区块链,但目前运行 ...

  8. Linux文件同步工具之rsync

    学习背景 1.最近公司的项目在使用jenkins做自动化构建,因为jenkins在构建时是比较耗性能的,便单独使用了一台服务器做构建服务器.但是个人觉得这样成本过高,单独拿一台服务器来构建并且该服务器 ...

  9. linux文本编辑器教学

    linux常见服务 一. 文本编辑器 vi vim是vi增强版 vim需要安装 sudo apt-get -y install vim 1 vim的三种工作模式 1 编辑模式 命令模式=>编辑模 ...

  10. C++学习笔记6_字符串

    1. C语言的字符串,char * s = "aaaa"; #include<string> class Test{ public : Test(int a, char ...