react框架,使用vite和nextjs構建react項目

react框架

????????React 是一個用于構建用戶界面(UI)的 JavaScript 庫,它的本質作用是使用js動態的構建html頁面,react的設計初衷就是為了更方便快捷的構建頁面,官方并沒有規定如何進行路由和數據獲取,要構建一個完整的react項目,我們需要借助一些其他的工具或者整合了react的框架,

這里推薦使用2種方式搭建react項目:

  • vite,react router,react
    • 啟動速度快,打包體積小,適合小型項目
  • next.js?
    • Next.js 是一個用于構建全棧 Web 應用程序的 React 框架,它既可以構建頁面,也能搭建后臺,可以很便捷的實現ssr服務端渲染,適合大型的項目

?使用vite和react router 搭建react

vite官網:Vite | 下一代的前端工具鏈 (vitejs.cn)

react router官網:Home v6.24.1 | React Router

在命令行中輸入命令

npm create vite@latest

輸入項目名稱,選擇react框架

語言可以選擇js或者ts,演示使用的是ts

之后再輸入下面提示的3個命令

 cd my-react npm installnpm run dev進入項目文件夾
安裝依賴
啟動項目

執行完npm install 后目錄下會多一個node_modules文件夾,

此時就可以啟動項目了

?

成功啟動了react項目,

在這個基礎上,再來使用react router搭建路由

npm install react-router-dom

可以再package.json中查看路由的安裝,

在src下新建3個文件夾,并在文件夾下新建page.tsx(page.jsx)文件

// my:
export default function my() {return(<div>my</div>)
}// home:
export default function home() {return(<div>home</div>)
}// about:
export default function about() {return(<div>about</div>)
}

添加一些基本內容

在main.tsx中配置路由

import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.tsx'import { createBrowserRouter, RouterProvider} from 'react-router-dom'
import Home from './home/page.tsx'
import About from './about/page.tsx'
import My from './my/page.tsx'const router = createBrowserRouter([{path: '/',element: <App/>,children:[{path: '',element: <Home/> ,},{path: '/about',element: <About/>,},{path: '/my',element: <My/>,}]},
])ReactDOM.createRoot(document.getElementById('root')!).render(<React.StrictMode><RouterProvider router={router}></RouterProvider></React.StrictMode>,
)

App.tsx中設置跳轉,

import { Link ,Outlet} from "react-router-dom"function App() {return (<><nav><Link to='/'>home </Link><Link to='/about'>about </Link><Link to='/my'>my </Link></nav><Outlet></Outlet></>)
}export default App

注意:以上將默認的樣式(引入的css)去掉了,同時要保證App組件在RouterProvide內部,oulet是路由出口,組件頁面的內容在這里展示

啟動項目查看頁面

?

這樣就完成了路由配置

使用next.js搭建react項目

構建nextjs框架使用npx命令

npx create-next-app@latest

npx的特點,npx是包執行器,它可以獲取任意環境的包,而npm是包管理器,只能安裝本地的包,一般是通過下載到本地在安裝包

輸入項目名稱后一路回車即可,采用官方的默認配置

這里要注意的就是這個App Router,這是官方的默認路由措施,

安裝完成后查看項目目錄,核心文件就是這兩個文件

進入項目文件夾,啟動項目

npm run dev

?

成功啟動了項目,可以看到花費的時間是比較長的,

然后開始來配置路由,nextjs的路由是比較特殊的,它不需要去配置路徑和聲明路由,以文件名稱作為路由

????????next.js采用的是自動路由措施,以src下app文件夾為根路徑自動配置路由,也就是說,在創建組件的時候路由就自動生成了

  • layout.tsx 頁面容器
  • page.tsx 頁面內容
  • 文件夾的名稱是路由路徑,
    • 一般的名稱 --- about => /about
    • 特殊的名稱
      • --- [id] => /${id} 動態的路徑,傳遞id參數 ,這種方式需要使用客戶端跳轉 "use client"
      • --- _parmas => 不會被解析成路由路徑,變成服務器端組件,虛擬節點,由服務端生成后傳遞給客戶端
  • "use client" :客戶端組件,在next.js中組件默認為服務端組件

以下展示了一個路由結構,?

?layout.tsx:根容器,

import type { Metadata } from "next";
import "./globals.css";
import Nav from "./_nav/Nav";export const metadata: Metadata = {title: "Create Next App",description: "Generated by create next app",
};export default function RootLayout({children,
}: Readonly<{children: React.ReactNode;
}>) {return (<html lang="en"><body><Nav></Nav>{children}{/* 路由出口 */}</body></html>);
}

page.tsx:根頁面

import React from "react";export default function Home() {// React 并不強制使用 JSX,也可以使用原生的 JavaScript// jsx/tsx語法// return (//   <>//     <div className="box-content h-32 w-32 p-4 border-4">//       <h1>Home</h1>//     </div>//   </>// );// 原生js/ts語法return React.createElement('div',{ className: 'box-content h-32 w-32 p-4 border-4' },React.createElement('h1',null,'Home'),'');
}

more/page.tsx:

import React from "react";export default function () {return (<div><h1>More</h1></div>)
}

_nav/Nav.tsx:

import Link from "next/link"export default function () {return(<div><Link href="/">home</Link><Link href="/about">about</Link><Link href="/more">more</Link><hr /></div>)
}

about/layout.tsx:

import Nav from "./_nav/Nav"export default function ({ children }: Readonly<{ children: React.ReactNode }>) {return (<><Nav></Nav><h2 className="">二級路由容器</h2><div>{children /*子路由內容 */}</div></>)
}

about/page.tsx:


export default function () {return(<div className="h-32 w-32 bg-red-500 text-white flex justify-center items-center"><h1>About</h1></div>)
}

about/_nav/Nav.tsx:

import Link from "next/link"export default function () {return(<div><Link href="/about/list">list</Link><Link href="/about/100">100</Link><hr /></div>)
}

about/list/page.tsx:


export default function () {return(<div><ul><li>list#1</li><li>list#2</li><li>list#3</li></ul></div>)
}

about/[id]/page.tsx:

"use client" //客戶端跳轉,不會像服務端請求頁面
import { useParams } from "next/navigation"export default function () {const { id } = useParams()// console.log(id)return(<div><div>id --- {id}</div></div>)
}

最終結果展示

以上就是關于next.js項目的基本搭建過程

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41058.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41058.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41058.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微信小程序:圖片轉icon

svg方式 通過svg圖片的方式也能實現自定義icon。但是相比第一種方式&#xff0c;svg圖片可以修改顏色&#xff0c;并且縮放的失真率也比較低。不過小程序wxss并不支持加載本地的svg圖片。我們可以通過在線(https://www.sojson.com/image2base64.html)svg轉base64的方式在wxss中…

Java中的線程調度與性能優化技巧

Java中的線程調度與性能優化技巧 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 1. 引言 在Java應用程序中&#xff0c;線程調度和性能優化是提升系統響應速…

3D技術賦能電商行業:“人-貨-場”視角下的新變革!

在當今數字化時代&#xff0c;3D技術正以前所未有的方式賦能電商行業&#xff0c;在提升用戶體驗&#xff0c;優化商品展示&#xff0c;以及打造沉浸式的購。物場景上&#xff0c;重塑了電商行業的面貌&#xff0c;深刻改變著消費者的購物體驗和商家的營銷策略。 51建模網作為專…

Eclipse 菜單:深入解析與高效使用技巧

Eclipse 菜單:深入解析與高效使用技巧 Eclipse 是一款廣泛使用的集成開發環境(IDE),它為Java、C++、PHP等編程語言提供了一個強大的開發平臺。Eclipse 的菜單是其用戶界面的一部分,提供了豐富的功能和選項,以幫助開發者更高效地工作。本文將深入解析 Eclipse 的菜單系統…

視圖庫對接系列(GA-T 1400)九、視圖庫對接系列(本級)機動車數據推送

背景 在上幾章中,我們已經可以將視圖庫的平臺寫到我們的數據庫中了。 換句話說就已經接入我們的平臺了,這幾期的話,我們就對接設備, 將設備的數據接入到我們平臺來。 機動車數據推送 接入機動車數據推送相對比較簡單,我們只需要實現對應的接口就ok了。 具體如圖: 有增…

RRStudio 下載及安裝(詳盡版)

R語言來自S語言&#xff0c;是S語言的一個變種。S語言、C語言、Unix系統都是貝爾實驗室的研究成果。R 語言是一種解釋型的面向數學理論研究工作者的語言&#xff0c;主要用于統計分析、繪圖、數據挖掘。 R 語言自由軟件&#xff0c;免費、開放源代碼&#xff0c;支持各個主要計…

Emacs有什么優點,用Emacs寫程序真的比IDE更方便嗎?

Emacs 是一個功能強大的文本編輯器&#xff0c;它在開發者和程序員中非常受歡迎&#xff0c;主要優點包括&#xff1a; 可定制性&#xff1a;Emacs 允許用戶通過 Lisp 編程語言來自定義編輯器的行為和界面&#xff0c;幾乎可以修改任何方面。擴展性&#xff1a;擁有大量的擴展…

TypeScript 如何快速獲取函數的返回類型

ReturnType 是 TypeScript 的一個內置工具類型&#xff0c;用于獲取一個函數的返回類型。下面是一個使用 ReturnType 的示例: function add(a: number, b: number): number {return a b; }type AddReturnType ReturnType<typeof add>; // AddReturnType 是 number 類型…

C++:類型轉換

目錄 一、C語言中的類型轉換 二、為什么C要新的轉換格式 三、 C強制類型轉換 1.static_cast 2.reinterpret_cast 3.const_cast 4.dynamic_cast 一、C語言中的類型轉換 在C語言中&#xff0c;如果賦值運算符左右兩側類型不同&#xff0c;或者形參與實參類型不匹配&…

【高階數據結構】B-數、B+樹、B*樹的原理

文章目錄 B樹的概念及其特點解析B樹的基本操作插入數據插入數據模擬 分析分裂如何維護平衡性分析B樹的性能 B樹和B*樹B樹B樹的分裂B樹的優勢 B*B*樹的分裂 總結 B樹的概念及其特點 B樹是一顆多叉的平衡搜索樹&#xff0c;廣泛應用于數據庫和 文件系統中&#xff0c;以保持數據…

等保2.0的具體技術要求有哪些重點?

在數字化浪潮洶涌澎湃的當下&#xff0c;網絡安全猶如一座守護智慧之城的巍峨城墻&#xff0c;不可或缺。等級保護制度&#xff08;等保&#xff09;作為我國網絡安全戰略的基石&#xff0c;歷經歲月沉淀&#xff0c;已演進至2.0時代&#xff0c;即《網絡安全等級保護基本要求》…

算法思想總結:優先級隊列

一、最后一塊石頭的重量 . - 力扣&#xff08;LeetCode&#xff09; 我們每次都要快速找到前兩個最大的石頭進行抵消&#xff0c;這個時候用優先級隊列&#xff08;建大堆&#xff09;,不斷取堆頂元素是最好的&#xff01;每次刪除堆頂元素后&#xff0c;可以自動調整&#xf…

CentOS 7配置阿里云鏡像源及其加速

備份原yum源的配置&#xff1a;mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下載Centos-7.repo文件curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 清除及生成緩存 # 清除yum緩存 yum clean …

HarmonyOS - 通過.p7b文件獲取fingerprint

1、查詢工程所對應的 .p7b 文件 通常新工程運行按照需要通過 DevEco Studio 的 Project Structure 勾選 Automatically generate signature 自動生成簽名文件&#xff0c;自動生成的 .p7b 文件通常默認在系統用戶目錄下. 如&#xff1a;C:/Users/zhangsan/.ohos/config/default…

【Thread】python Thread Timer使用示例

import threading import time# 定義一個函數&#xff0c;它接受可變數量的字符串參數 def print_message(*messages):for message in messages:print(message)# 定義一個函數&#xff0c;它作為定時器線程的回調函數 def timer_thread(wait_time, *args):print(f"等待 {w…

JavaSE面試題(二)

目錄 一.為什么會有Java內存模型&#xff1f; 二.什么樣的情況下finally不會執行 三.鉤子是什么&#xff1f; 四.編譯時期的多態性和運行時期的多態性 五.談談反射機制 六.Java管道 本專欄全是博主自己收集的面試題&#xff0c;僅可參考&#xff0c;不能相信面試官就出這…

TCP報文校驗和(checksum)計算

一. 原理 將TCP相關內容&#xff08;TCP偽頭部TCP頭部TCP內容&#xff09;轉換成16比特的字符&#xff0c;然后進行累加&#xff0c;最后結果進行取反。TCP偽頭部是固定的&#xff0c;下文有相關代碼展示。 二. 源碼 源碼 #include <stdio.h> #include <stdlib.h&…

3D雞哥又上開源項目!單圖即可生成,在線可玩

大家好&#xff0c;今天和大家分享幾篇最新的工作 1、Unique3D Unique3D從單視圖圖像高效生成高質量3D網格&#xff0c;具有SOTA水平的保真度和強大的通用性。 如下圖所示 Unique3D 在 30 秒內從單視圖野生圖像生成高保真且多樣化的紋理網格。 例如屬于一張雞哥的打球寫真照 等…

js 遞歸調用 相同對象--數組遞歸調用

<div class="save-cl"> <a-button @click="saveCl" >保存為常用策略</a-button> </div> saveCl(){ console.log(this.form.filterList[0],--------常用策略)// 此對象為上圖對象 console.log(this.allElementsHaveValue(thi…

Windows的管理工具

任務計劃程序&#xff1a;這是一個用來安排任務自動運行的工具。你可以在這里創建新的任務&#xff0c;設定觸發條件&#xff0c;并指定任務的操作。 事件查看器&#xff1a;這是一套日志記錄和分析工具&#xff0c;&#xff0c;你可以了解到系統的工作狀況&#xff0c;幫助診…