Next.js與TypeScript從零起步學習筆記-2.組件

此文章,會介組件的基本使用

參考官網(wǎng):https://nextjs.org/learn/basics/getting-started
開發(fā)環(huán)境:
window10 x64
node v10.16.3
npm v6.13.4

1.組件

接上一節(jié)內容.
在我們實際開發(fā)時,頁面有些元素往往是重復的,就如簡書,無論你換多少篇文章,它的頭部都盡是一樣


image.png

假如我們?yōu)槊恳粋€頁面都寫一個這個這樣頭部,那就問題大了,有一點小變動,我們就全部都改一次嗎?顯然不合理.我們可以公共的東西,封裝成一個組件,可以套用在任何需要用到的地方.
現(xiàn)在,我們來創(chuàng)建一個公共的組件,以供其他頁面使用:
在原來的項目上面,我們來創(chuàng)建一個名為'components'的文件夾,然后在里面創(chuàng)建一個'Header.tsx'的文件,這個是我們的公共頭部,
敲入如下代碼:

import Link from 'next/link';

const linkStyle = {
    marginRight: 15
  };

const Header = () => (
  <div>
    <Link href="/">
      <a style={linkStyle}>Home</a>
    </Link>
    <Link href="/about">
      <a style={linkStyle}>About</a>
    </Link>
  </div>
);

export default Header;

如圖1:


圖1.png

接著,我們需要在其他頁面引用這個'公共的頭部',打開我們的'pages/index.tsx'頁面,把這個頁面全改成以下代碼:

import Header from '../components/Header';

const Home = () => (
  <div>
      <Header />
      <p>Hello Next.js</p>
    </div>
);

export default Home;

圖2.png

注意圖2紅框部分,那是引入和應用組件的部分.
然后再在我們的'pages/about.tsx'文件,也相應加入紅框部分的代碼,如下圖3:


圖3.png

啟動我們項目,可以在瀏覽器看到效果,如圖4:

圖4.png

點擊'Home'會去到index頁,點擊about會去到about頁,而頭部都共用.(請注意哦,components這個文件不一定需要命名為'components',你命名為'comps'也沒有關系,就是在其他文件引用時候,把'components'改成'comps'就可以了)
但現(xiàn)在還有個問題,假如我想傳入一些參數(shù)到組件呢?就例如導航,我想點home時候,頭部組件顯示現(xiàn)在home頁,點擊aboutn頁時候,頭部組件顯示about頁面.
現(xiàn)在,我們需要改下'components/Header.tsx'這個文件的代碼:

import { NextPage } from 'next';
import Link from 'next/link';

const linkStyle = {
    marginRight: 15
  };

const Header: NextPage<{ pageName: string }> = (props:any) => (
  <div>
    <Link href="/">
      <a style={linkStyle}>Home</a>
    </Link>
    <Link href="/about">
      <a style={linkStyle}>About</a>
    </Link>
    <div>這里是:{props.pageName}</div>
  </div>
);

export default Header;

如圖5


如圖5.png

然后我們會看到home和about頁面都報錯,乃是因為約束了'pageName'這個參數(shù)是必填的,如圖6:


image.png

現(xiàn)在我們只需要把'pageName'的參數(shù)加一下,保存之后,就可以在瀏覽器看到效果了.
如圖6.png

如圖6.png

本來呢,想打算把余下內容:參數(shù)傳遞,獲取數(shù)據(jù)以及創(chuàng)建API.都寫完了,只是沒料到寫組件花了如此多時間,下節(jié)繼續(xù)吧,附上git地址:https://github.com/JaqenHo/next_js_learn.git

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容