欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Next.js腳手架完整搭建封裝的方法步驟

 更新時(shí)間:2022年04月26日 14:31:27   作者:dingdang  
本文主要介紹了Next.js腳手架完整搭建封裝的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

針對(duì)實(shí)際的開發(fā)場(chǎng)景(SEO優(yōu)化需求),我們直接使用next.js腳手架創(chuàng)建的項(xiàng)目還無(wú)法直接進(jìn)行開發(fā),需要再次進(jìn)行配置封裝搭建,這里分享一套自己的完整封裝搭建給有需要的小伙伴使用;

內(nèi)容包括:
(1)sass樣式配置;
(2)axios攔截封裝;
(3)action模塊化;
(4)reducer模塊化;
(5)redux搭建;
(6)dispatch示范;
(7)saga中間件配置;
(8)saga攔截示范;
(9)useEffect異步請(qǐng)求示范;
(10)getServerSideProps/getStaticProps示范;
(11)ssr與csr效果對(duì)比;
基本可以做到直接使用,如有特殊的配置需要,大家也可以自行添加即可;
(1)npm install
(2)npm run dev

倉(cāng)庫(kù)地址

倉(cāng)庫(kù)代碼(github)

運(yùn)行效果

代碼實(shí)現(xiàn)

import type { NextPage } from 'next'
import Head from 'next/head'
import Image from 'next/image'
import React, {useEffect, useState } from 'react';
import {useDispatch,useSelector} from 'react-redux'
import fetch from 'node-fetch';
import api from '../http/api';
import {changeUserAC} from "../redux/actions/index"
import axios from 'axios';
import Publish from '../components/common/Publish/Publish';
import { compileString } from 'sass';

const Home: NextPage = (props:any) => {
//異步請(qǐng)求的數(shù)據(jù)(客戶端渲染);
  const [name,setName]=useState<any>("")
  useEffect(()=>{
    (async()=>{
      const res:any =await axios({
        url:"https://api.apiopen.top/getSingleJoke?sid=28654780"
      })
      setName(res.result.name)
      console.log("客戶端獲取的數(shù)據(jù)",res);
      console.log("服務(wù)端注入的數(shù)據(jù)",props);
    })();
  },[])
//異步請(qǐng)求的數(shù)據(jù)(客戶端渲染);

  //狀態(tài)機(jī)內(nèi)部的數(shù)據(jù);
  const stateData:any = useSelector<any>(state=>{
    console.log("狀態(tài)機(jī)數(shù)據(jù)",state);
    return state
  })
  //狀態(tài)機(jī)內(nèi)部的數(shù)據(jù);

  //派發(fā)action修改狀態(tài)機(jī)內(nèi)部的數(shù)據(jù);
  const dispatch = useDispatch();
  const changeRedux=()=>{
    dispatch(changeUserAC("李海"))
  } 
  //派發(fā)action修改狀態(tài)機(jī)內(nèi)部的數(shù)據(jù);

  //調(diào)用封裝的axios獲取后臺(tái)數(shù)據(jù)
  const getData = async () => {
    const res:any = await api.dataManage.GetCollectionData();
    console.log('請(qǐng)求結(jié)果',res);
    alert(`請(qǐng)求結(jié)果${res.result.name}`)
  };
  //調(diào)用封裝的axios獲取后臺(tái)數(shù)據(jù)

  const compareEffect=async()=>{
    window.location.reload()
  }

  //saga攔截
  const goToSaga=()=>{
    dispatch(
      {
        type:'changeUserData',
        payload:'劉利'
      }
    )
  } 
  //saga攔截

  return (
    <>
          <div>
            <p>來(lái)自服務(wù)端注入預(yù)渲染的:{props.data.result.name}</p>
            <p>來(lái)自異步請(qǐng)求返回的:{name}</p>
            <p><button onClick={()=>compareEffect()}>對(duì)比服務(wù)端渲染和客戶端渲染效果</button></p>
            <p>來(lái)自Redux的數(shù)據(jù):{stateData.user.users}</p>
            <p><button onClick={()=>changeRedux()}>派發(fā)事件修改redux數(shù)據(jù)</button></p>
            <p><button onClick={()=>getData()}>調(diào)用封裝的axios獲取后臺(tái)數(shù)據(jù)</button></p>
            <p><button onClick={()=>goToSaga()}>通過(guò)saga中間件攔截后修改redux數(shù)據(jù)</button></p>
            <div style={{marginLeft:30,marginTop:30}}><Publish/></div>
          </div>
    </>
  );
}

export async function getServerSideProps() {
  const res = await fetch(`https://api.apiopen.top/getSingleJoke?sid=28654780`)
  const data = await res.json()
  return { props: { data } }
}
// export async function getStaticProps() {
//   const res = await fetch('...')
//   const posts = await res.json()
//   return {
//     props: {
//       return { props: { data } }
//     },
//   }
// }
export default Home

到此這篇關(guān)于Next.js腳手架完整搭建封裝的方法步驟的文章就介紹到這了,更多相關(guān)Next.js腳手架搭建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript 正則表達(dá)式詳解

    JavaScript 正則表達(dá)式詳解

    正則表達(dá)式(Regular Expression)是一門簡(jiǎn)單語(yǔ)言的語(yǔ)法規(guī)范,是強(qiáng)大、便捷、高效的文本處理工具,它應(yīng)用在一些方法中,對(duì)字符串中的信息實(shí)現(xiàn)查找、替換和提取操作
    2021-11-11
  • 深入理解 ES6中的 Reflect用法

    深入理解 ES6中的 Reflect用法

    這篇文章主要介紹了深入理解 ES6中的 Reflect用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • JavaScript中ES6字符串?dāng)U展方法

    JavaScript中ES6字符串?dāng)U展方法

    這篇文章主要介紹了JavaScript中ES6字符串?dāng)U展方法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • JavaScript中數(shù)據(jù)類型轉(zhuǎn)換總結(jié)

    JavaScript中數(shù)據(jù)類型轉(zhuǎn)換總結(jié)

    在js中,數(shù)據(jù)類型轉(zhuǎn)換分為顯式數(shù)據(jù)類型轉(zhuǎn)換和隱式數(shù)據(jù)類型轉(zhuǎn)換。本文將對(duì)此進(jìn)行介紹,具有一定的參考價(jià)值,需要的朋友一起來(lái)看下吧
    2016-12-12
  • 使用javascript實(shí)現(xiàn)監(jiān)控視頻播放并打印日志

    使用javascript實(shí)現(xiàn)監(jiān)控視頻播放并打印日志

    這篇文章主要介紹了使用javascript實(shí)現(xiàn)監(jiān)控視頻播放并打印日志的方法及示例代碼分享,非常不錯(cuò),需要的朋友可以參考下
    2015-01-01
  • 2020京東618疊蛋糕js腳本(親測(cè)好用)

    2020京東618疊蛋糕js腳本(親測(cè)好用)

    這篇文章主要介紹了京東618疊蛋糕js腳本,基于auto.js 打開,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Javascript實(shí)現(xiàn)Vue跨組件通信的方法詳解

    Javascript實(shí)現(xiàn)Vue跨組件通信的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Vue的跨組件通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 如何從零開始利用js手寫一個(gè)Promise庫(kù)詳解

    如何從零開始利用js手寫一個(gè)Promise庫(kù)詳解

    ES2015 推出了JS 的 Promise ,而在沒有原生支持的時(shí)候,我們也可以使用諸如 Promises/A+ 的庫(kù)的幫助,在我們的代碼里實(shí)現(xiàn)Promise 的支持,下面這篇文章主要給大家介紹了如何從零開始利用js手寫一個(gè)Promise庫(kù)的相關(guān)資料,需要的朋友可以參考下。
    2018-04-04
  • three.js顯示中文字體與tween應(yīng)用詳析

    three.js顯示中文字體與tween應(yīng)用詳析

    這篇文章主要給大家介紹了關(guān)于three.js顯示中文字體與tween應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • JavaScript通過(guò)setTimeout實(shí)時(shí)顯示當(dāng)前時(shí)間的方法

    JavaScript通過(guò)setTimeout實(shí)時(shí)顯示當(dāng)前時(shí)間的方法

    這篇文章主要介紹了JavaScript通過(guò)setTimeout實(shí)時(shí)顯示當(dāng)前時(shí)間的方法,涉及javascript操作時(shí)間顯示的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04

最新評(píng)論