首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Vue.js 组件复用性:真正可复用还是伪装的复用

作者 | Fang Tanbamrung 译者 | 核子可乐 策划 | 丁晓昀 大家讨论在 Vue.js 中创建 UI 组件时,总会提到复用性的问题。...假设我们创建了一个复用组件: 那我或我的同事真能在系统的其他部分复用这个组件吗? 面对新需求,我们可能还得修改这个“复用组件”。...如果需要拆分这个“复用组件”,以便把拆分出来的新组件应用到其他位置,又该如何操作? 在 Vue.js 中创建复用组件的具体过程其实颇为棘手。...在本文中,我们将具体探讨复用组件的概念、实际应用时面临的问题,以及为什么有必要花心思克服这一道道难关。 复用组件是个啥?...在组件设计中考虑一致性和灵活性:第二个问题,就是如何在复用组件的不同实例之间保持一致性,同时保留灵活的定制空间。复用组件应当具备充分的通用性,从而适应不同的设计要求和风格。

20420
您找到你想要的搜索结果了吗?
是的
没有找到

React组件复用

处理方式:复用相似的功能(联想函数封装) 复用什么?1. state 2....withXXX 高阶组件内部创建一个类组件,在这个类组件中提供复用的状态逻辑代码,通过prop将复用的状态传递给 被包装组件 const CatWithMouse = withMouse(Cat)...const PositionWithMOuse = withMouse(Position) // 高阶组件内部创建的类组件: const WithMouse = (Base) => { class...,名称约定以 with 开头 指定函数参数(作为要增强的组件) 传入的组件只能渲染基本的UI 在函数内部创建一个类组件,提供复用的状态逻辑代码,并返回 在内部创建组件的render中,需要渲染传入的基本组件...,增强功能,通过props的方式给基本组件传值 调用该高阶组件,传入要增强的组件,通过返回值拿到增强后的组件,并将其渲染到页面中 // 创建组件 const MousePosition = withMouse

1.3K60

深入理解工厂模式:创建复用的对象实例

前言 工厂模式是一种常用的设计模式,它可以帮助我们更好地组织和管理代码,将对象的创建和使用分离开来,提高代码的可维护性和扩展性。 在软件开发中,我们经常会遇到需要创建多个不同类型的对象的情况。...简单工厂模式 简单工厂模式通过一个工厂类来创建所有产品的实例。客户端只需要提供给工厂类一个参数,工厂类根据这个参数决定实例化哪个具体产品类的对象并返回给客户端。...我们可以创建一个 ShapeFactory 工厂类来根据客户端传递过来的参数来实例化相应的对象。...,但将具体的对象创建延迟到子类中实现。...通过使用抽象工厂,客户端可以创建多个产品家族的对象。

10410

React组件间逻辑复用

写在前面 React 里,组件是代码复用的主要单元,基于组合的组件复用机制相当优雅。...(摘自Use HOCs For Cross-Cutting Concerns) 很难把状态逻辑拆出来作为一个复用的函数或组件: However, we often can’t break complex...并且,对于复用的状态逻辑,这份状态只维护在带状态的高阶组件中(相当于扩展 State 也有了组件作用域),不存在冲突和互相干扰的问题: // This function takes a component...HOC、Render Props 等基于组件组合的方案,相当于先把要复用的逻辑包装成组件,再利用组件复用机制实现逻辑复用。...,是真正在从下层去尝试解决(组件间)细粒度逻辑的复用问题 此外,这种声明式逻辑复用方案将组件间的显式数据流与组合思想进一步延伸到了组件内,契合 React 理念: Hooks apply the React

1.5K50

React组件复用的技巧

复用组件化开发体系的立命之本,可以说组件化的初衷就是为了复用性。...但是组件化的复用方式也存在一定的问题,其中拆分粒度就是其中一个绕不开的话题,今天咱们就来讲一讲 React 当中的一个不太常用的 API:cloneElement,他如何帮组我们更好得进行组件拆分。...显然是有的,最明显的就是无法在使用Header的时候指定props如果Header有props,那么就我们只能硬编码在Layout里面,不能在使用Header组件的地方进行声明,所以如果我们想要复用一个...}这么做显然在组件较为复杂而且props较多的情况下,也可以达到一定的复用效果,但是追求极致的我们肯定不希望仅仅局限于此。...他做的事情其实就是拷贝目标element,并把后面两个参数覆盖原element的props,以此创建一个新的ReactElement。

43120

(十四)组件逻辑复用Composables

最佳组件逻辑复用 Composables composables 的基本使用 说明 在 compostionApi 中我们可以使用 composables 来实现逻辑代码的复用,一个composable...说明 下面我们来看一下 composables 是如何使用的 创建文件 composables // 第一步先在 src 根目录下创建一个 composables 文件夹 // 第二步在 composables...removeMessage } = useListData() // 返回方法给 模板使用 return { messages, removeMessage } } 二、真正意义上的抽离复用...说明 从上面的代码来看,虽然我们把组件当中的代码抽离出来了,但是里面的数据啊还是写死的,下面我们来处理一下,实现真正意义上的逻辑复用 改造 // 我们让 userListData 接收一个参数, 让使用这个...,增强复用

63720

vue如何二次封装一个高频复用组件

我们所有人心里的答案肯定是,同样类似的代码太多了,我想复用组件,或者原有组件可能达不到我想要的效果,我想基于原有组件自定义一些自己的接口,那么此时就需要二次封装了。...在内容开始之前,本文主要从以下几个方向去思考: 1、二次组件必须继承原有组件的所有特性 2、二次组件名必须见名知意 3、自定义暴露出来的接口越简单越好 4、留有自定义插槽,让用户可以自己选择 5、封装二次的组件...当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind="$attrs" 传入内部组件——在创建高级别的组件时非常有用。...它可以通过 v-on="$listeners" 传入内部组件——在创建更高层次的组件时非常有用。...v-model 关于v-model实际上官方解释就是用在组件或者表单上创建双向绑定,如果把v-model看成是一个内部提供的一个语法糖,那么它可以拆解成:value="value"与:input=“handleInput

2.1K20

React组件复用的方式

React组件复用的方式 现前端的工程化越发重要,虽然使用Ctrl+C与Ctrl+V同样能够完成需求,但是一旦面临修改那就是一项庞大的任务,于是减少代码的拷贝,增加封装复用能力,实现维护、复用的代码就变得尤为重要...,在React中组件是代码复用的主要单元,基于组合的组件复用机制相当优雅,而对于更细粒度的逻辑(状态逻辑、行为逻辑等),复用起来却不那么容易,很难把状态逻辑拆出来作为一个复用的函数或组件,实际上在Hooks...Mixin倾向于增加更多状态,这降低了应用的预测性,导致复杂度剧增。 隐式依赖导致依赖关系不透明,维护成本和理解成本迅速攀升。...return ; } 这不仅仅是性能问题,重新挂载组件会导致该组件及其所有子组件的状态丢失,如果在组件之外创建HOC,这样一来组件只会创建一次。...,但是整体来说代码复用还是很复杂的,这其中很大一部分原因在于细粒度代码复用不应该与组件复用捆绑在一起,HOC、Render Props 等基于组件组合的方案,相当于先把要复用的逻辑包装成组件,再利用组件复用机制实现逻辑复用

2.8K10

用 :key 管理复用元素

引用官方文档的原话: Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。 这里的 input 实际上复用了切换之前的 input。...这是因为,我们将 index 作为复用的判断依据,相当于告诉 Vue:“只要这两个东西的 index 一样,就进行复用”。...可以很明显地看到,每个元素都复用了先前的对应元素,这是因为此时 item (即元素值)才是复用的判断依据,相当于告诉 Vue:“只要这两个东西的元素值一样,就进行复用”。...例如对于 C 来说,它只会复用与自己的值一样的元素,显然这个元素就是 C 本身。同理,D 复用 D,E 复用 E,CDE 都不需要重新渲染了,只需要后移以方便 F 插入,这时候的性能显然要好很多。...vue 和 react的虚拟 DOM 的 Diff 算法大致相同,其核心是基于两个简单的假设: 两个相同的组件产生类似的DOM结构,不同的组件产生不同的DOM结构。

56810

前端组件的抽象复用思考

抽象复用的弊: 难以面面俱到,总会有一些产物是游离在规则之外的,特别是视觉层面的东西不确定性太大,相比按钮组件的封装是改动很小的一种 UI 组件,而一旦涉及到多元素结合加样式的组件,局限性就暴露了,传统思维的抽象封装就很难...知道了上面的思路后,回到复用,抽象上面,为什么要抽象复用? 这是我之前总结的对于提取公共组件的一些想法: 公共组件在短期内能被 5 个及以上的页面使用么?...所以为了保证抽象后的复用性,同时兼顾组件的灵活,我采取的策略是: 组件应当用来服务于特定的业务项目。...但前提是这个组件是有成为公共组件的需求存在,如果都不一定要成为公共组件,你不抽象不封装都没有问题,考虑到时间成本,没有复用性的组件,压根就没必要做抽象。...所以,「数据结构 + 数据 + 样式 = 最终的页面效果」 的思路下,对于菜单组件,我们要复用的是递归的结构,只要提供了这个框架,在这上层细节的布局就按照特定的业务形态去实现就好了,之后这个菜单组件就可以在这个业务中做复用

59520

React组件复用的技巧详解

复用组件化开发体系的立命之本,可以说组件化的初衷就是为了复用性。...但是组件化的复用方式也存在一定的问题,其中拆分粒度就是其中一个绕不开的话题,今天咱们就来讲一讲 React 当中的一个不太常用的 API:cloneElement,他如何帮组我们更好得进行组件拆分。...显然是有的,最明显的就是无法在使用Header的时候指定props如果Header有props,那么就我们只能硬编码在Layout里面,不能在使用Header组件的地方进行声明,所以如果我们想要复用一个...}这么做显然在组件较为复杂而且props较多的情况下,也可以达到一定的复用效果,但是追求极致的我们肯定不希望仅仅局限于此。...参考 React面试题详细解答他做的事情其实就是拷贝目标element,并把后面两个参数覆盖原element的props,以此创建一个新的ReactElement。

56510

多路由复用页面组件问题

本文围绕 Vue Router 中路由组件复用问题展开 场景复现 项目中经常会遇到增改查的需求,通常采用不同的路由指向同一个页面组件,以此到达复用页面的功能,但是复用页面存在一些状态问题。...、mounted等生命周期钩子 beforeRouteUpdate重用的组件官方解释(指的是动态路由匹配) 在当前路由改变,但是该组件复用时调用,举例来说,对于一个带有动态参数的路径 /foo/:id...,在 /foo/1 和 /foo/2 之间跳转的时候 动态路由匹配 文档请看这里 响应路由参数的变化 当使用路由参数时,例如从 /user/foo 导航到 /user/bar,原来的组件实例会被复用。...因为两个路由都渲染同个组件,比起销毁再创建复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用。...beforeRouteEnter (调用守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入。

97010

基于CMS的组件复用实践

接下来我将基于自己在前端工作过程中的实践,跟大家分享基于CMS的组件复用实践。...想要实现跨项目之间的组件复用,需要解决以下问题, 1.组件组件之间,组件与项目之间需要解耦 2.组件需要给出使用方法(文档) 3.组件需要能够独立运行 4.组件需要有版本管理并且可以按需加载 5.需要一个工具把这些组件管理并且展示出来...同时, 为了方便这些组件的编写和维护,我们给组件制定了更加严格的约束,同时将这些符合约束的复用组件称为“区块”,意思是可以独立于项目的一个功能区域。...在具体实践过程中,为了实现组件复用,需要按照固定的结构去写组件,还需要在项目中修改main.js和webpack配置工作,所以,我们开发了CLI工具和GUI工具来生成项目和组件基本文件,同时管理和调试组件...对于复用的功能,使用CLI生成区块基本文件,进行区块开发      6. 开发完毕,项目上线发布区块库      7.

49320

谈谈 React + Redux 的复用

,如:HBase、EMR,DataPipeline 等,直接导致了会有很多新项目需要搭建开发(如上文所述的28个项目,并且还在持续增长中),所以这里开发新项目采用的方案是部分组件复用,部分代码横向复制。...[1504233169628_2075_1504233170167.png] 图:新项目开发模式 如上图所示, React组件模块 和 公共模块是被复用的,ModuleJS会加载同一个js模块。...二、React + Redux 业务层复用方案 上述所述,团队开发方式中存在的一个本质问题就是缺乏 React + Redux 业务层模块的复用。...特别要说明的是,QMRR组件是使用Remod框架输出的复用业务层组件,该组件包含React 业务组件与Redux 相关业务层代码,与传统Page不同的是,使用了Remod内置的connect方法延迟连接到...AutoReducer 是 Remod 另一特色,该模块能够创建自动化的 Redux Reducer 处理器,使得开发人员不用写 Reducer 代码,提升工作效率。

3.6K20
领券