nuxt中需要注意的一些点

1 The client-side rendered virtual DOM tree is not matching server-rendered content.This is likely caused by incorrect HTML markup, for example nesting block-level elements inside

, or missing . Bailing hydration and performing full client-side render.报错问题

       今日还剩

        1

        

      套

如上。一个div中的内容是文本+标签的形势。那么编译会报错vue.runtime.esm.js?a593:619 [Vue warn]: The client-side rendered virtual DOM tree is not matching server-rendered content. This is likely caused by incorrect HTML markup, for example nesting block-level elements inside

, or missing . Bailing hydration and performing full client-side render.

虽然编译时报错但是并不影响程序运行,但是在生产环境上则会报错 xxxnode cannot appendChild...整个程序无法运行。

此时就是我们书写的html结构不规范导致。

如果修改成如下结构则不会报错:

 

        今日还剩

        1

        

        

我们把文本内容也用span标签包裹起来。这样就不会报错

2 注意不要使用HEXA颜色模式。一般用的比较多的颜色值是rgba和hex。也就是形如rgab(255,2555,255,0.2)和#cc3300。如果是

HEXA则会出现#cc22ff00.(8位)。这样会在手机上设置失效

3 nuxt如何配置proxy进行请求转发?

首先 安装 @nuxtjs/axios和@nuxtjs/proxy来处理 axios 跨域问题:  npm i @nuxtjs/axios @nuxtjs/proxy -D

在nuxt.config.js文件中做如下配置:

  modules: ["@nuxtjs/axios", "@nuxtjs/proxy"],

  axios: {

    proxy: true,

    progress: true,

  },

  proxy: {

    "/api/": {

      target: "http://localhost:9090", // 目标接口域名

      changeOrigin: true, // 表示是否跨域

    }

  },

接下来我们将在组件中进行asyncData进行请求:

export default {

 async asyncData({ app }) {

    let res = await app.$axios.get("/api/user/info");

    let { name, age, phone } = res.data;

    return {

      name,

      age,

      phone

    };

  },

}

而页面中

这里name就是我们要显示在组件中的数据

当然。如果不想太过proxy进行代理。我们可以配置axios的baseURL,如下所示:

  modules: ["@nuxtjs/axios", "@nuxtjs/proxy"],

  axios: {

    proxy: true,

    progress: true,

    baseURL: "http://localhost:9090" //这是我们请求接口的域名

  },

在页面中:

export default {

 async asyncData({ app }) {

    let res = await app.$axios.get("/api/user/info");

    let { name, age, phone } = res.data;

    return {

      name,

      age,

      phone

    };

  },

}

设置baseURL以后,请求中将会自动带上baseurl。这和在spa应用中是一样的

 

4 如何在nuxt实现按需加载(以element-ui)为例

实现步骤

1:在plugins文件夹新建一个element.ui.js文件

 import Vue from 'vue'

import {Pagination,Loading,Alert,Notification,Form,FormItem,Input} from 'element-ui'

Vue.use(Pagination);

Vue.use(Loading);

Vue.use(Alert);

Vue.use(Form);

Vue.use(FormItem);

Vue.use(Input);

2在nuxt.config.js文件中做如下修改:

 css: [

    "element-ui/lib/theme-chalk/index.css",

  plugins: [

    "@/plugins/element-ui",

  ],

  build: {

    analyze: true,

    analyze:{

      analyzerMode:"static"

    },

    babel:{

      plugins:[

        ["component",{

          "libraryName":"element-ui",

          "styleLibraryName":"theme-chalk"

        }]

      ]

    },

  }

4 nuxt 里如何实现动态路由?

我们以一个商品列表+商品详情作为例子   

项目结构如下:

---pages

   ----productList(文件夹)

      ---index.vue

      ---_proId.vue

在pages目录下新建一个productList文件夹,然后在里面在新建两个文件夹,一个是index.vue这就是我们的productList页面。同时再新建一个_proId.vue这就是我们动态路由对应的商品详情页面。

我们可以在productList下做如下代码:

 

    

我是productlist列表页

    

      { { item.name }}

    

  

export default {

  name: "product",

  components: {},

  props: {},

  data() {

    return {

      arr: [

        { id: 0, name: "清华大学" },

        { id: 1, name: "北京大学" },

        { id: 2, name: "复旦大学" },

        { id: 3, name: "武汉大学" },

      ],

    };

  },

  computed: {},

  created() {},

  mounted() {},

  methods: {

    goDetail(item) {

      this.$router.push({ path: `/product/${item.id}` });

    },

  },

};

然后我们在详情页里通过this.$route.params.proId接受这个id值:

_proId页面如下:

 

你可能感兴趣的:(vue,vue)