成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Next.js之基礎(chǔ)概念

2bdenny / 698人閱讀

摘要:是一個(gè)基于實(shí)現(xiàn)的服務(wù)端渲染框架,地址為。本文先從簡(jiǎn)單地基礎(chǔ)概念開(kāi)始,一步一步帶大家認(rèn)識(shí)。本篇教程到此結(jié)束,后面會(huì)跟大家介紹的服務(wù)端渲染及以及部署相關(guān)的一下概念及示例代碼。

Next.js是一個(gè)基于React實(shí)現(xiàn)的服務(wù)端渲染框架,github地址為next.js。

使用Next.js實(shí)現(xiàn)服務(wù)端渲染是一件非常簡(jiǎn)單的事,在這里,你完全可以不用自己去寫(xiě)webpack等配置,Next.js全都幫你做了。本文先從簡(jiǎn)單地基礎(chǔ)概念開(kāi)始,一步一步帶大家認(rèn)識(shí)Next.js。

先初始化我們的項(xiàng)目目錄結(jié)構(gòu):

mkdir learn-next
cd learn-next
npm init -y
npm install react react-dom next -S
mkdir pages

可以看到,我們最后一步的時(shí)候創(chuàng)建了一個(gè)命名為pages的文件夾,這是因?yàn)镹ext.js采用的是文件系統(tǒng)作為API,每一個(gè)放在pages中的文件都會(huì)映射為一個(gè)路由,路由名稱(chēng)與文件名相同。

打開(kāi)package.json文件,配置我們的項(xiàng)目啟動(dòng)命令

{
    "scripts": {
        "dev": "next"
    }
}

然后在命令行中啟動(dòng)我們的項(xiàng)目:

npm run dev

打開(kāi)http://localhost:3000,可以看到Next.js給我們報(bào)了404,這是因?yàn)槲覀冞€沒(méi)寫(xiě)任何內(nèi)容。

基礎(chǔ)路由

在pages目錄下新建index.js,輸入以下內(nèi)容:

export default () => (
    

Hello Next.js

)

這時(shí)候,我們可以看到Next.js已經(jīng)把我們的內(nèi)容渲染出來(lái)了,如下所示:

頁(yè)面間導(dǎo)航

頁(yè)面間跳轉(zhuǎn)是很正常的事,因此,Next.js為我們準(zhǔn)備了Link這個(gè)高階組件,用于頁(yè)面導(dǎo)航。我們先新建一個(gè)about.js文件

export default () => (
    

This is about page

)

然后將我們的index.js更改為:

import Link from "next/link"

export default () => (
    
About Page

Hello Next.js

)
共用組件

我們的組件不可能都是孤立的,組件間復(fù)用是很常見(jiàn)的事,例如頁(yè)面的頭部,底部,導(dǎo)航條等等,因此我們可以在根目錄下新建一個(gè)components目錄用于存放共用的組件。

新建一個(gè)Header.js文件

import Link from "next/link"

const linkStyle = {
  marginRight: 15
}

export default () => (
    
)

新建一個(gè)Layout.js文件

import Header from "./Header"

const layoutStyle = {
  margin: 20,
  padding: 20,
  border: "1px solid #DDD"
}

export default (props) => (
  
{props.children}
)

更改我們的pages/index.js文件

import Layout from "../components/Layout.js"

export default () => (
  
       

Hello Next.js

)

打開(kāi)http://localhost:3000,可以看到我們的共用組件生效了:

動(dòng)態(tài)頁(yè)面

假設(shè)有一個(gè)post頁(yè)面,該頁(yè)面接收一個(gè)id,并將該id展示出來(lái),那么怎么做呢。

在pages下新建post.js文件,內(nèi)容如下:

import Layout from "../components/Layout.js"

export default (props) => (
    
       

{props.url.query.id}

This is the post page.

)

如上所示:我們從url.query.id中拿到頁(yè)面?zhèn)鬟^(guò)來(lái)的id

那么怎么把id從index頁(yè)面?zhèn)鬟^(guò)去呢,回到pages/index.js頁(yè)面,代碼更改如下:

import Layout from "../components/Layout.js"
import Link from "next/link"

const PostLink = (props) => (
  
  • {props.id}
  • ) export default () => (

    My Blog

    )

    在上面的代碼中,我們?cè)贚ink標(biāo)簽中使用了as屬性,它的作用是更改路由的名稱(chēng),當(dāng)我們點(diǎn)擊"learn-nextjs"時(shí),我們可以看到,地址欄的地址顯示為http://localhost:3000/p/learn-nextjs

    服務(wù)端路由

    上面的代碼其實(shí)是有問(wèn)題的,這只適合在瀏覽器端進(jìn)行導(dǎo)航,但是當(dāng)我們?cè)趆ttp://localhost:3000/p/learn-nextjs下刷新頁(yè)面時(shí),會(huì)看到服務(wù)器給我們報(bào)了404,因此我們需要同步適配一下服務(wù)端的路由。

    我們選用express來(lái)作為服務(wù)端框架,當(dāng)然你也可以使用koa。

    npm install express -S

    在根目錄下新建server.js文件,代碼如下:

    const express = require("express")
    const next = require("next")
    
    const dev = process.env.NODE_ENV !== "production"
    const app = next({ dev })
    const handle = app.getRequestHandler()
    
    app.prepare()
    .then(() => {
      const server = express()
    
      server.get("/p/:id", (req, res) => {
        const actualPage = "/post"
        const queryParams = { id: req.params.id } 
        app.render(req, res, actualPage, queryParams)
      })
    
      server.get("*", (req, res) => {
        return handle(req, res)
      })
    
      server.listen(3000, (err) => {
        if (err) throw err
        console.log("Ready on http://localhost:3000")
      })
    })
    .catch((ex) => {
      console.error(ex.stack)
      process.exit(1)
    })

    更改package.json中我們的項(xiàng)目啟動(dòng)方式:

    {
      "scripts": {
        "dev": "node server.js"
      }
    }

    這時(shí)候刷新頁(yè)面,可以看到我們的頁(yè)面也被正確渲染了。

    本篇教程到此結(jié)束,后面會(huì)跟大家介紹Next.js的服務(wù)端渲染(ssr)及css in js以及部署相關(guān)的一下概念及示例代碼。

    文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84252.html

    相關(guān)文章

    • Next.js基礎(chǔ)概念(二)

      摘要:樣式在中寫(xiě)樣式,一般可以歸為類(lèi),一類(lèi)是基于文件的傳統(tǒng)方式包括,等,另一類(lèi)則是。我們回到我們的代碼中,更改,代碼如下在標(biāo)簽中,我們寫(xiě)我們的,必須包含在中,否則會(huì)報(bào)錯(cuò)。至此,的基礎(chǔ)概念已經(jīng)介紹完了,更高級(jí)的用法,可以參考官方的例子。 本篇教程基于上一篇的基礎(chǔ),主要講解服務(wù)端渲染,樣式以及部署相關(guān)的一些知識(shí),若你沒(méi)有看過(guò)上一篇的內(nèi)容,或者你看過(guò)又忘了,建議重新去看一遍。 順便說(shuō)一句,Next...

      DirtyMind 評(píng)論0 收藏0
    • 前端每周清單:Node.js 微服務(wù)實(shí)踐,Vue.js 與 GraphQL,Angular 組件技巧

      摘要:前端每周清單第期微服務(wù)實(shí)踐,與,組件技巧,攻防作者王下邀月熊編輯徐川前端每周清單專(zhuān)注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開(kāi)發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開(kāi)發(fā)教程工程實(shí)踐深度閱讀開(kāi)源項(xiàng)目巔峰人生等欄目。 前端每周清單第 26 期:Node.js 微服務(wù)實(shí)踐,Vue.js 與 GraphQL,Angular 組件技巧,HeadlessChrome 攻防 作者:王下邀月熊 編輯:徐川...

      wall2flower 評(píng)論0 收藏0
    • 前端每周清單第 12 期:支付寶前端構(gòu)建工具發(fā)展、LinkedIn用Brotli加快網(wǎng)頁(yè)響應(yīng)速度、餓

      摘要:前端每周清單第期支付寶前端構(gòu)建工具發(fā)展用加快網(wǎng)頁(yè)響應(yīng)速度餓了么升級(jí)實(shí)踐前端前端每周清單前端每周清單專(zhuān)注前端領(lǐng)域內(nèi)容,分為新聞熱點(diǎn)開(kāi)發(fā)教程工程實(shí)踐深度閱讀開(kāi)源項(xiàng)目巔峰人生等欄目。 前端每周清單第 12 期:支付寶前端構(gòu)建工具發(fā)展、LinkedIn用Brotli加快網(wǎng)頁(yè)響應(yīng)速度、餓了么PWA 升級(jí)實(shí)踐 為InfoQ中文站特供稿件,首發(fā)地址為這里;如需轉(zhuǎn)載,請(qǐng)與InfoQ中文站聯(lián)系。從屬于筆...

      liuchengxu 評(píng)論0 收藏0
    • 前端清單第 27 期:React Patent License 回復(fù),Shopify WebVR 購(gòu)

      摘要:新聞熱點(diǎn)國(guó)內(nèi)國(guó)外,前端最新動(dòng)態(tài)就開(kāi)源許可證風(fēng)波進(jìn)行回復(fù)數(shù)周前,基金會(huì)決定禁止旗下項(xiàng)目使用,因?yàn)槠湓跇?biāo)準(zhǔn)的許可證之外添加了專(zhuān)利聲明此舉引發(fā)了社區(qū)的廣泛討論,希望能夠更新其開(kāi)源許可證。 showImg(https://segmentfault.com/img/remote/1460000010777089); 前端每周清單第 27 期:React Patent License 回復(fù),Sho...

      jeffrey_up 評(píng)論0 收藏0
    • 前端每周清單半年盤(pán)點(diǎn) React 與 ReactNative 篇

      摘要:前端每周清單半年盤(pán)點(diǎn)之與篇前端每周清單專(zhuān)注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開(kāi)發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開(kāi)發(fā)教程工程實(shí)踐深度閱讀開(kāi)源項(xiàng)目巔峰人生等欄目。與求同存異近日,宣布將的構(gòu)建工具由遷移到,引發(fā)了很多開(kāi)發(fā)者的討論。 前端每周清單半年盤(pán)點(diǎn)之 React 與 ReactNative 篇 前端每周清單專(zhuān)注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開(kāi)發(fā)者了解一周前端熱點(diǎn);分為...

      Barry_Ng 評(píng)論0 收藏0

    發(fā)表評(píng)論

    0條評(píng)論

    閱讀需要支付1元查看
    <