当前位置: 首页 > article >正文

使用client-only 解决组件不兼容SSR问题

目录

前言

一、解决方案

1.基于Nuxt 框架的SSR应用 

2.基于vue2框架的应用

3.基于vue3框架的应用 

二、总结

往期回顾


前言

最近在我的单页面SSR应用上开发JSON编辑器功能,在引入组件后直接客户端跳转OK,但是在直接加载服务端渲染的时候一直报这个错误:[vite] Error when evaluating SSR module /node_modules/json-editor-vue3/lib/json-editor.vue: failed to import "jsoneditor"

经过查阅资料才知道是组件不兼容SSR,下面我总结了下该问题的解决方案,希望能帮到大家! 

一、解决方案

1.基于Nuxt 框架的SSR应用 

Nuxt框架提供了client-only插件来解决这个问题。

npm:https://www.npmjs.com/package/client-only

SSR场景下只需要将组件包裹起来就ok啦! 

2.基于vue2框架的应用

Vue2提供了vue-client-only插件来解决这个问题。

npm:https://www.npmjs.com/package/vue-client-only 

那么怎么使用呢?

插件安装

yarn add vue-client-only

 模板使用

<template>
  <div id="app">
    <h1>My Website</h1>
    <client-only>
      <!-- this component will only be rendered on client-side -->
      <comments />
    </client-only>
  </div>
</template>

<script>
  import ClientOnly from 'vue-client-only'

  export default {
    components: {
      ClientOnly
    }
  }
</script>

注意:这个是基于vue2的插件,vue3可能不适用。

3.基于vue3框架的应用 

vue3有大神解决了vue不兼容的问题。使用@duannx/vue-client-only插件来修复。

npm:https://www.npmjs.com/package/@duannx/vue-client-only

插件安装

npm install --save @duannx/vue-client-only
or
yarn add @duannx/vue-client-only

 模板使用

<template>
  <client-only>
    <json-editor-vue
      v-model="resultInfo"
      :show-btns="false"
      :mode="'tree'"
      lang="zh"
      :expanded-on-start="true"
      @json-change="onJsonChange" @json-save="onJsonSave"
    />
  </client-only>
</template>

<script lang="ts">
import ClientOnly from '@duannx/vue-client-only';
import JsonEditorVue from 'json-editor-vue3';
export default defineComponent({
  name: 'JsonFormat',
  components:{
    JsonEditorVue,
    ClientOnly
  },
  setup() {
    // json编辑器内容变化
    const onJsonChange = (value:any) => {
      console.log('value:', value);
    };
    // json编辑器内容保存
    const onJsonSave = (value:any) => {
      console.log('value:', value);
    };
    // 返回
    return {
      onJsonChange,
      onJsonSave,
      	// 在data中添加测试数据
      resultInfo: {
        'test1': '1234',
        'test2': '5678'
      }
    };
  }
});
</script>

 问题完美修复啦!YYDS!

二、总结

client-only 被挂载之前, 使用此属性作为文本占位符,组件只会在客户端被渲染,所以服务端加载不会再报错。今天就分享到这里啦!欢迎在评论区交流。如果文章对你有所帮助,❤️关注+点赞❤️鼓励一下博主会持续更新。。。。

我的博客:前端小阳仔_Html,CSS,JavaScript,Vue,React,Angular领域博主

往期回顾

 css实现元素居中的6种方法 

Angular8升级至Angular13遇到的问题

前端vscode必备插件(强烈推荐)

Webpack性能优化

vite构建如何兼容低版本浏览器

前端性能优化9大策略(面试一网打尽)!

vue3.x使用prerender-spa-plugin预渲染达到SEO优化

 vite构建打包性能优化

 vue3.x使用prerender-spa-plugin预渲染达到SEO优化

 ES6实用的技巧和方法有哪些?

 css超出部分显示省略号

vue3使用i18n 实现国际化

vue3中使用prismjs或者highlight.js实现代码高亮

什么是 XSS 攻击?什么是 CSRF?什么是点击劫持?如何防御


http://www.kler.cn/a/234084.html

相关文章:

  • 数据库系统原理:数据恢复与备份策略
  • 知乎 PB 级别 TiDB 数据库集群管控实践
  • Zabbix6.0升级为7.2
  • 封装(2)
  • 用python ollama qwen2.5 开发一个AI修仙游戏
  • DataX与DataX-Web安装与使用
  • 【十四】【C++】list 的常见用法
  • 【Qt 学习之路】在 Qt 使用 ZeroMQ
  • Rust基础拾遗--核心功能
  • 深入探究 HTTP 简化:httplib 库介绍
  • 用EXCEL从地址(上海)中提取各区(浦东新区等区)信息
  • 【笔记】Harmony学习:下载安装 DevEco Studio 开发工具IDE
  • Stable Diffusion 模型下载:GhostMix(幽灵混合)
  • 海外云手机——平台引流的重要媒介
  • NAS如何成为生产力?使用绿联DX4600 Pro搭建图床并实现创作自由
  • Solidworks:平面草图练习
  • 前端小案例——动态导航栏文字(HTML + CSS, 附源码)
  • C# CAD交互界面-自定义面板集-添加快捷命令(五)
  • 机器学习2--逻辑回归(案列)
  • 大数据Flume--入门
  • C 语言学习七:指针
  • 【MySQL题】——基础概念论述(二)
  • 基于YOLOv8算法的照片角度分类项目实践
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Web组件
  • 【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏10(附项目源码)
  • 【力扣 51】N 皇后(回溯+剪枝+深度优先搜索)