Nuxt 开发经验分享

Nuxt 开发经验分享

Nuxt 介绍

简单来说,Nuxt.js 是一个基于Vue的通用应用框架,采用SSR(Server Side Rendering 服务端渲染);目的是为了解决单页面应用的 SEO 问题;vue单页面应用渲染是从服务器获取所需js,在客户端将其解析生成HTML挂载于id为app的DOM元素上,这样会存在两个大问题:

1.由于页面内容是通过js插入,对于内容性网站来说,搜索引擎无法抓取网站内容,也就是用户搜不到此网站的相关信息,不利于SEO;
2.资源请求量大,造成网站首屏加载缓慢,不利于用户体验

而我们公司做的网站刚好是内容性质的网站 爱德媒BlockADM~~~

Nuxt 安装

Nuxt.js 团队创建了脚手架工具 create-nuxt-app

 $ npx create-nuxt-app <项目名>  

前提是已经安装了vue脚手架搭建项目的环境,比如npm; npx在NPM版本5.2.0就已经默认安装了;在安装的过程中,它会让你进行一些选择,在集成的服务端框架之间进行选择,我的项目是选择None(Nuxt默认服务器);选择喜欢的ui框架 根据实际项目选择;之后的我基本都是选择默认的了;安装完成之后 进入项目 npm run dev 启动项目

   $ cd <project-name>

   $ npm run dev

Nuxt 项目目录结构

Nuxt 目录结构

实战经验

路由

nuxt按照 pages 文件夹的目录结构自动生成路由(vue需在 src/router/index.js 手动配置路由)

`

  pages/
  --| user/
 -----| index.vue
 -----| one.vue
  --| index.vue

`

Nuxt.js 生成对应的路由配置表为:

`

   router: {
     routes: [
      {
       name: 'index',
       path: '/',
       component: 'pages/index.vue'
     },
     {
       name: 'user',
       path: '/user',
       component: 'pages/user/index.vue'
    },
    {
       name: 'user-one',
       path: '/user/one',
       component: 'pages/user/one.vue'
     }
   ]
  }
`

引入本地css文件以及js插件

 `
 export default {
   mode: 'universal',
   head: {
    title: '爱德媒BlockADM-价值共享网络' || '',
     meta: [
      { charset: 'utf-8' },
       ],
     link: [
      { rel: 'icon', type: 'image/x-icon', href: '/logo_icon.png' }
     ]

    loading: { color: '#fff' },
  /* ** 全局样式引入 */
    css: [
      'element-ui/lib/theme-chalk/index.css',
      '~static/css/common.css',
     ],
  /*** 全局js */
    plugins: [

     { src: '~/plugins/main_client.js', mode: 'client' },
     { src: '~/plugins/main.js', mode: 'server' },
     '~/plugins/axios'
    ],
   }

 `

项目的全局css是放在static/css/common.css中 ,项目中用的js全局js,分为两个文件, 一个是在服务端渲染的,一个是在客户端渲染的,mode分别都不一样,这里是我踩过的坑 ,不过前端大部分的js都是在客户端;第二点 axios.js是自己封装了原本axios的文件,可以把它当作全局的js文件,所以把它挡在plugins中,然后再配置文件中引入

请求

Nuxt.js扩展了Vue.js,增加了一个叫 asycData 的方法,使得我们可以再设置组件的数据之前能异步获取或者处理数据,使用方法:

 ** 单个请求**

  ` 

   async asyncData (context) {
    let {data} = await context.$axios.get(`news/app/visitor/newsFlash/get`,{params: {id:context.query.id}});
    return {
      content:data.data.content,
      newsFlashTime:data.data.createTime,
      newsFlashTitle:data.data.title,
    }
  },
 
 `

其中content,newsFlashTime等 是自己定义的data中的数据

**并发请求**

 `
  async asyncData (context) {
    console.log(context);
    let [data,dataTwo,dataThree] = await Promise.all([
      context.$axios.get("user/app/visitor/getMemberInfoByUserId",{params: {userId:context.query.id}}),
      context.$axios.post("news/web/visitor/newsArticle/page",{
        pageNum: 1,
        pageSize: 3,
        sortType: 2
      }),
      context.$axios.post("news/web/visitor/newsArticle/page",{
        pageNum: 1,
        pageSize: 6,
        memberId: context.query.id
      })
    ]);

    return {
      personDate:data.data.data,
      allViewDate:dataTwo.data.data.records,
      articleDate:dataThree.data.data.records
    }
  },
       
 `

重点:context 来了解该对象的所有属性和方法。

先整理到这里吧 目前所遇到的问题是这些~~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nuxt.js 中,`asyncData` 方法是用于在页面组件渲染前获取数据的一种特殊方法。它可以在服务端渲染和客户端渲染时都被调用,以保证页面在渲染前已经获取到了必要的数据。 如果你在使用 Nuxt.js 时发现 `asyncData` 方法在刷新页面时没有被执行,可能是因为你的页面组件并没有被重新渲染。这种情况下,你可以尝试以下方法: 1. 确认页面组件是否被重新渲染 在 Nuxt.js 中,页面组件的数据获取是在服务端渲染时进行的,而在客户端渲染时则会直接使用已经获取到的数据。因此,如果你在刷新页面时发现 `asyncData` 方法没有被执行,可能是因为页面组件并没有被重新渲染。你可以通过查看控制台中的输出信息,确认页面组件是否被重新渲染。 2. 使用 `fetch` 方法代替 `asyncData` 在 Nuxt.js 2.12 版本之后,`fetch` 方法被引入作为新的数据获取方法。与 `asyncData` 方法不同的是,`fetch` 方法可以在客户端渲染时被重新执行,以确保页面组件获取到最新的数据。因此,你可以尝试使用 `fetch` 方法代替 `asyncData` 方法,以解决刷新页面时数据获取不到的问题。 3. 使用 `beforeRouteUpdate` 方法 如果你在使用 Nuxt.js 2.12 之前的版本,或者不希望使用 `fetch` 方法,你可以尝试使用 `beforeRouteUpdate` 方法。这个方法会在路由参数发生变化时被调用,可以用来重新获取数据并更新页面组件。 总之,如果你在使用 Nuxt.js 时遇到了 `asyncData` 刷新不执行的问题,可以通过以上方法尝试解决。同时,也可以在 Nuxt.js 的官方文档中查找更多的解决方案和使用经验
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值