框架实战指南-框架比较表

40 阅读3分钟

本文是系列文章的一部分:框架实战指南 - 基础知识

在本系列文章中,我们学习了非常多的 API!以下是迄今为止我们讲解过的所有 API 的速查表:

反应角度Vue注释和链接
function Comp() {}@Component() class Comp {}Comp.vueSFC 文件创建一个组件。
createRoot(el).render(<Comp/>)bootstrapApplication(Component)createApp(Comp).mount('el')渲染组件。
组件函数体类实例属性和方法<script setup>您的 JavaScript 代码去往何处。
useEffect带有空数组effect没有儿童信号onMounted对组件安装产生副作用。
<p>{val}</p><p>{{val}}</p><p>{{val}}</p>插入val到您的模板中。此功能实时更新。
useStatesignalref组件中的状态。
<div attr={val}><div [attr.attr]="val"><div v-bind:attr="val"> 或者 <div :attr="val">属性绑定到元素。此功能实时更新。
function Comp(props) {}input()defineProps(['prop'])组件输入定义。
<div prop={val}><div [prop]="val"><div v-bind:prop="val"> 或者 <div :prop="val">组件输入传递
<div onEvent={fn}><div (event)="fn()"><div v-on:event="fn()"> 或者 <div @event="fn()">DOM 事件绑定
将函数作为组件属性传递。output()defineEmits(['output'])组件输出定义。
{bool && <div>}@if (bool) {<div>}<div v-if="bool">有条件地渲染元素。
{bool ? <div/> : <div/>}@else {}<div v-else>使用“else”子句有条件地渲染。
具有不同值的多个条件。@else if (other) {} 或者 @switch@case<div v-else-if="other">使用多个“else”子句进行条件渲染。
{list.map(item => <div></div>)}@for (item of list) {<div>}<div v-for="item in list">呈现列表。
{list.map((item, idx) => <div></div>)}@for (item of list; let idx = $index) {<div>}<div v-for="(item, idx) in list">获取列表渲染中的索引。
<div key={item.id}>@for (item of list; track item.id) {<div>}<div :key="item.id">使用键来区分列表中的元素。
<div key={item.id}>不适用<div :key="item.id">使用键作为渲染提示。
useEffect从具有空依赖数组的函数返回。effect清理功能onUnmounted  watchEffect清理函数 watch清理函数组件卸载时的副作用清理。
<StrictMode>不适用不适用确保副作用清除的 API
useEffect没有第二个参数不适用onUpdated监听重新渲染。
useEffect使用数组来跟踪值effectwatch 或者 watchEffect组件内数据改变的副作用。
useLayoutEffect油漆前运行由于缺少 VDOM,因此不适用watch{immediate: true}和/或{flush: "post"}渲染/绘制/提交阶段跟踪
useRef类属性突变let可变突变无需重新渲染即可更改数据
useEffectuseRef先前的值effect具有先前值的类属性watch具有旧值和新值参数监听组件属性的变化
useMemocomputedcomputed基于属性的计算值
<Fragment> 或者 <></><ng-container><template>透明元素
children具有 JSX 值的属性<ng-content><slot>儿童注射部位
具有 JSX 值的命名属性<ng-content select="name"><slot name="name" />指定儿童注射部位
const refName = useRef()&<div ref={refName}>viewChild()const refName = ref()&<div ref="refName">不会触发响应式更改的元素引用
<div ref={fn}>viewChild()afterRenderEffect<div :ref="fn">触发响应式更改的元素引用
useRef([])&<div ref={el => ref.current[i] = el}>viewChildren()ref([])&ref="refName"元素引用数组
forwardRef不适用不适用允许访问自定义组件
useImperativeHandle引用组件的所有方法和属性都默认公开defineExpose允许访问组件的内部
componentDidCatchErrorHandleronErrorCaptured记录错误
getDerivedStateFromErrorErrorHandler+ 父级状态onErrorCaptured+ref显示错误
createContextInjectionToken 或者 Injectable不适用依赖注入上下文创建
Context.Providerproviders类上的数组provide依赖注入数据提供程序
useContextinjectinject依赖注入数据注入
默认启用inject(SomeVal, {optional: true})默认启用可选注入值
Context.Provider在根组件中@Injectable({ providedIn: "root" })provide在根组件中应用范围提供商
createPortal(<div/>, el)DomPortal 或者 TemplatePortalcdkPortalOutlet<Teleport to="body">门户内容到其他 DOM 位置
自定义钩子信号函数作品组件之间的逻辑共享
不适用@Directive()具有特殊属性的对象指令
children属性和单个值传递contentChild()不适用访问对单个投影子项的引用
Children.toArray(children)contentChildren()不适用访问预计儿童的参考
Children.count(children)contentChildren()length财产不适用统计预计生育的儿童
children(val)ng-template& 模板上下文<template>&v-slot将值传递给投影子项