当前位置:首页 > VUE

vue功能组件实现

2026-01-19 14:57:52VUE

Vue 功能组件实现

定义组件

功能组件通常是无状态(stateless)且无实例(no-instance)的组件,仅通过 props 接收数据并渲染内容。使用 functional: true 标记组件为功能组件。

export default {
  functional: true,
  props: ['message'],
  render(h, { props }) {
    return h('div', props.message);
  }
}

使用插槽

功能组件可以通过 slots() 访问插槽内容,动态渲染子元素。

vue功能组件实现

export default {
  functional: true,
  render(h, { slots }) {
    return h('div', slots().default);
  }
}

上下文参数

render 函数的第二个参数是上下文对象,包含以下属性:

vue功能组件实现

  • props:组件接收的 props
  • children:子节点(等同于 slots().default
  • data:传递给组件的整个数据对象
  • parent:父组件实例
export default {
  functional: true,
  render(h, { props, children }) {
    return h('button', { on: { click: props.onClick } }, children);
  }
}

高阶函数组件

通过工厂函数生成功能组件,实现逻辑复用。

function createFunctionalComponent(options) {
  return {
    functional: true,
    ...options
  };
}

const MyComponent = createFunctionalComponent({
  props: ['count'],
  render(h, { props }) {
    return h('span', `Count: ${props.count}`);
  }
});

性能优化

功能组件没有实例化过程,适合渲染大量静态内容或列表项。通过避免响应式数据绑定和生命周期钩子,减少性能开销。

export default {
  functional: true,
  props: ['items'],
  render(h, { props }) {
    return h('ul', props.items.map(item => h('li', item.text)));
  }
}

与普通组件对比

普通组件通过 this 访问实例属性和方法,而功能组件通过上下文参数传递数据。功能组件更适合纯展示型逻辑,普通组件适合需要状态管理的场景。

标签: 组件功能
分享给朋友:

相关文章

vue实现tooltips组件

vue实现tooltips组件

Vue实现Tooltips组件的方法 基础实现:使用Vue指令 创建一个自定义指令v-tooltip,通过鼠标事件触发提示框的显示与隐藏。 Vue.directive('tooltip', {…

vue VUE实现日历组件功能

vue VUE实现日历组件功能

Vue 日历组件实现方法 基础日历结构 使用Vue的模板语法构建日历的HTML结构,通常包含头部(年月显示、切换按钮)和日历表格(星期标题和日期格子)。 <template> <…

vue怎么实现功能

vue怎么实现功能

Vue 是一个渐进式 JavaScript 框架,常用于构建用户界面。以下是一些常见的功能实现方法: 数据绑定 Vue 通过 v-model 实现双向数据绑定,适用于表单输入等场景: <te…

vue实现轨道功能

vue实现轨道功能

Vue 实现轨道功能的方法 轨道功能通常指在界面中实现元素沿特定路径移动的效果,例如进度条、时间轴或动画轨迹。以下是几种常见的实现方式: 使用 CSS 动画与 Vue 结合 通过 Vue 动态绑定样…

react如何删除组件

react如何删除组件

删除 React 组件的几种方法 条件渲染法 通过状态控制组件是否渲染。当状态为 false 时,组件会被移除: const [showComponent, setShowComponent] =…

vue实现递归组件

vue实现递归组件

递归组件的实现方法 在Vue中实现递归组件主要依靠组件调用自身的能力。以下是几种常见的实现方式: 使用组件name属性 通过组件的name属性实现递归调用是最简单的方式: <template…