Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >vue2升级vue3:Vue Router报错,directly inside <transition> or <keep-a

vue2升级vue3:Vue Router报错,directly inside <transition> or <keep-a

原创
作者头像
周陆军博客
发布于 2022-07-25 15:13:12
发布于 2022-07-25 15:13:12
2.4K00
代码可运行
举报
文章被收录于专栏:前端博客前端博客
运行总次数:0
代码可运行

vue3 报这个错误:

vue-router.mjs:35 [Vue Router warn]: <router-view> can no longer be used directly inside <transition> or <keep-alive>.

Use slot props instead:

<router-view v-slot="{ Component }">

  <keep-alive>

    <component :is="Component" />

  </keep-alive>

</router-view>

v-slot这种用法在tsx里应该是不能直接这么使用的,毕竟tsx不比模板,写tsx的本质其实是在写渲染函数,于是去翻阅babel-tsx-plugin的文档

最终实现代码:

router

router 页面设置了keep alive

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const router = [
  {
    path: 'dashboards/:folder_uid/:uid',
    name: 'dashboard-info',
    component: () => import(/* webpackChunkName: "DashboardPreview" */'@/pages/dashboard/dashboard'),
    props: route => ({ uid: route.params.uid }),
    meta: {
      parent: 'dashboard',
    },
  },
  {
    path: 'share-panel/:folder_uid/:uid',
    name: 'sharePanel',
    // component: SharePanel,
    components: {
      keepAlive: () => import(/* webpackChunkName: "SharePanelPage" */ '../pages/dashboard/dashboard-editor'),
    },
    meta: {
      isHideNav: true,
    },
  },
]

当然,也可以使用meta  来控制是否 keep-alive。不然过建议用上面的方式实现。

App home 页面

页面路由tsx代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { defineComponent, KeepAlive, Transition, Suspense, computed } from 'vue';
import { useRoute, RouterView } from 'vue-router';
import Navigation from '../../components/navigation';
import Loading from '@/components/loading';

export default defineComponent({
  name: 'HomePage',
  setup() {
    const route = useRoute();
    const isHideNav = computed(() => {
      let { isHideNav } = route.meta;
      if (window.location.search.includes('embed')) {
        isHideNav = true;
      }
      return isHideNav;
    });
    const routeClass = computed(() => {
      if (isHideNav.value) {
        return 'full-page';
      }
      return 'flex-1';
    });
    return () => (
      <div class='full-height flex-column'>
        {!isHideNav.value && (<Navigation/>)}
        <RouterView class={routeClass.value} name='keepAlive'>
          {{
            default: ({ Component, route }: { Component: () => JSX.Element, route: any }) => (
              <KeepAlive>
                <Component key={route.meta.usePathKey || route.params.space_uid}/>
              </KeepAlive>
            ),
          }}
        </RouterView>
        <RouterView class={routeClass.value}>
          {{
            default: ({ Component, route }: { Component: () => JSX.Element, route: any }) => (
              <Transition name={route.meta.transition || 'fade'} mode='out-in'>
                <Suspense>
                  {{
                    default: () => <Component key={route.meta.usePathKey || route.params.space_uid}/>,
                    fallback: () => <Loading/>,
                  }}
                </Suspense>

              </Transition>
            ),
          }}
        </RouterView>
      </div>
    );
  },
});

参考链接:

如何在vue3的jsx中使用keep-alive? https://www.zhihu.com/question/467503706

https://如何在tsx中使用vue-router4的keep-alive v-direct.xecus.cc/posts/53167.html

转载本站文章《vue2升级vue3:Vue Router报错,directly inside <transition> or <keep-a》, 请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/vue3/8862.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue Router深入学习(二)
通过阅读文档,自己写一些 demo 来加深自己的理解。(主要针对 Vue3) 上一篇:Vue Router 深入学习(一)
赤蓝紫
2023/01/02
9300
Vue Router深入学习(二)
Vue-Router学习笔记,持续记录
随着 ajax 的流行,异步数据请求交互运行在不刷新浏览器的情况下进行。而异步交互体验的更高级版本就是 SPA —— 单页应用。单页应用不仅仅是在页面交互是无刷新的,连页面跳转都是无刷新的,为了实现单页应用,所以就有了前端路由。 类似于服务端路由,前端路由实现起来其实也很简单,就是匹配不同的 url 路径,进行解析,然后动态的渲染出区域 html 内容。但是这样存在一个问题,就是 url 每次变化的时候,都会造成页面的刷新。那解决问题的思路便是在改变 url 的情况下,保证页面的不刷新。在 2014 年之前,大家是通过 hash 来实现路由,url hash 就是类似于:
房东的狗丶
2023/02/17
10K0
⚠️ Vue 3 TSX
写本篇文章主要是为了记录在正式使用 Vue 3 + vite 2 投入开发中遇到的一些问题,不适合没有任何 Vue 开发经验的同学阅读。本文中将会运用到 Vue 3 的 Composition api,vue-router@next。
Innei
2021/12/28
8900
Vue3中 router 带来了哪些变化?
本文基于的源码版本是 vue-next-router alpha.10,为了与 Vue 2.0 中的 Vue Router 区分,下文将 vue-router v3.1.6 称为 vue2-router。
前端老道
2022/03/29
3.3K0
vue-router 4 你真的熟练吗?
虽然 vue-router 4 大多数 API 保持不变,但是在 vue3 中以插件形式存在,所以在使用时有一定的变化。接下来就学习学习它是如何使用的。
呆呆
2021/12/01
9440
手把手教你怎么实现一个后台管理系统——架构篇
"修身,齐家,治国,平天下。这是儒家奉行的人生之道,也是我们现代人所所求的境界。当我们迈出脚步的时候,需要征服一座山,那就是我们自己"
用户9078190
2022/10/28
8650
手把手教你怎么实现一个后台管理系统——架构篇
vue2升级vue3:Vue2/3插槽——vue3的jsx组件插槽slot怎么处理
vue 在 2.6 版本中,对插槽使用 v-slot 新语法,取代了旧语法的 slot 和 slot-scope,并且之后的 Vue 3.0 也会使用新语法,这并不是仅写法的不同,还包括了性能的提升
周陆军博客
2022/06/24
2.6K0
Vite4+Pinia2通用后台管理平台实战ViteAdmin
https://cloud.tencent.com/developer/article/2144479
andy2018
2023/04/15
2.3K2
vue2升级vue3:composition api中监听路由参数改变
《watch性能优化:vue watch对象键值说明-immediate属性详解》
周陆军博客
2022/07/25
1.6K0
Vue3从入门到精通(三)
在 Vue3 中,插槽(Slots)的使用方式与 Vue2 中基本相同,但有一些细微的差异。以下是在 Vue3 中使用插槽的示例:
明志德道
2023/10/21
5800
VUE3集成TS和vue-router
Volar 是个 VS Code 的插件,其最大的作用就是解决了 template 的 TS 提示问题。
码客说
2022/03/07
1.4K0
VUE框架:vue2转vue3全面细节总结(5)过渡动效
如果想要在路由组件上使用转场,对导航进行动画处理,我可以使用 v-slot 结合 Animete.css 来实现:
淼学派对
2023/10/14
2860
VUE框架:vue2转vue3全面细节总结(5)过渡动效
【转载】vue 3.x 如何有惊无险地快速入门 —— 一文扫遍 vue2 与 3 的差异点
虽然 vue2 到 vue3 的实现大改,但在用法上变化基本不大,比较明显的一个变化就是添加了 setup(){} 函数了,几乎所有的配置变成了以函数的方式进行定义。即使是这样,但小改动还是很多的。本文主要分享的是 vue 2.x 与 vue 3.x 之间一些常见用法的差异。虽然记录的不多,但也不算少。本文资料来源:github.com/vuejs/rfcs/…
FungLeo
2020/05/27
2.1K0
【转载】vue 3.x 如何有惊无险地快速入门 —— 一文扫遍 vue2 与 3 的差异点
BuildAdmin13:区区重新加载,vue居然用了mitt事件总线库
关于弹出框,前几篇主要讲了如何渲染弹出框标签、实现弹出框的弹出位置、触发弹出框以及弹出框组件和tabs组件的数据交互。
叫我阿柒啊
2024/02/10
5680
BuildAdmin13:区区重新加载,vue居然用了mitt事件总线库
《vue3+ts+element-plus 后台管理系统系列五》之 标签栏导航(TagsView)
利用Keepalive缓存,对用的是cachedViews数组里的路由都会被缓存。
星宇大前端
2021/02/22
3.6K0
《vue3+ts+element-plus 后台管理系统系列五》之 标签栏导航(TagsView)
前端实战:electron+vue3+ts开发桌面端便签应用
具体实现过程, 内容很长, 建议先点赞收藏, 再一步步学习, 接下来会就该项目的每一个重点细节做详细的分析.
徐小夕
2021/09/03
3.9K0
前端实战:electron+vue3+ts开发桌面端便签应用
超详细!Vue-Router手把手教程
最近在重温vue全家桶,再看一遍感觉记忆更深刻,所以专门记录一下(本文vue-router版本为v3.x)。
全栈程序员站长
2022/09/07
2.3K0
vue3 router4 router-view transition keep-alive用法
注:在component上通过key属性控制,可以实现不同路由使用相同组件,否则不会切换
路过君
2022/04/13
1.3K0
【Vue3+TypeScript】CRM系统项目搭建之 — 关于 VUE3 语法新变化
vite 是新一代前端构建工具,官网地址:https://vitejs.cn,vite的优势如下:
HelloWorldZ
2024/03/20
7380
【Vue3+TypeScript】CRM系统项目搭建之 — 关于 VUE3 语法新变化
2020前端技术面试必备Vue:(二)组件篇
上一章已经更新了Vue基础,那么本章将更新Vue中最重要的概念--组件,会介绍到组件的使用,组件传值,插槽的使用,插槽的分类。
程序员海军
2021/10/11
6590
2020前端技术面试必备Vue:(二)组件篇
推荐阅读
相关推荐
Vue Router深入学习(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验