react-vite-antd環境下新建項目

vite 創建一個react項目

  • 1. 安裝vite并創建一個react項目
      • 1. 我使用的 yarn安裝,基本配置項目名字, 框架react ,js
      • 2. cd vite-react進入項目目錄安裝node包并啟動項目
  • 2. 安裝引入Ant Design
    • 引入依賴(我用的yarn,沒有安裝的也可以使用npm,根據自己情況選擇)
    • 使用啟動命令:yarn run dev 或者npm run dev
    • 清除App.jsx默認內容并引入antd
      • 1. 清空App.css和index.css文件中內容
      • 2. 修改App.jsx中內容
      • 3. 頁面顯示:
  • 3. 引入布局和菜單欄
    • 1. 引入布局組件
      • 1. 代碼
      • 報錯:`Uncaught SyntaxError: The requested module '/node_modules/.vite/deps/antd.js?v=d0b75d53' does not provide an export named 'Header' (at App.jsx:3:36)`
      • 運行后發現多了默認樣式外邊距,修改默認樣式
    • 2. 引入左側菜單欄組件
      • ?? 1. 代碼(手寫代碼在最后)
      • 📖 2. 運行后,點擊按鈕沒反應
        • 報錯:warning.js:19 Warning: [antd: Menu] `inlineCollapsed` not control Menu under
        • 📖 重新運行
      • 3. 調整布局樣式
        • ?? 1. 新建src/views/index.jsx。把原來App.jsx文件內容轉移到新建的src/views/index.jsx中, 對App修改如下。`注意引入jsx文件名字要大寫`
        • 📖 2. 運行后樣式
  • 4. 添加動態路由設置
    • 1. 集中react-router對比
      • * React-Router:
      • * React-Router-DOM:
      • * Reach Router:
    • 2. 三種路由模式:HashRouter、BrowserRouter 和 MemoryRouter 都是 React Router 提供的路由組件
    • 2. 安裝/使用 React-Router-DOM
      • * 安裝/引用:
      • * 在導航組件中使用。 也可以新建routerAdmin.jsx作為管理router文件
        • 動態路由完整代碼
          • ?? 1. router文件
          • ?? 2. App.jsx代碼
          • 📖 3.運行后頁面效果
        • 開發中報錯:warning.js:19 Warning: [antd: Menu] `children` will be removed in next major version. Please use `items` instead.
        • 開發中報錯:index.jsx:14 Uncaught SyntaxError: The requested module '/node_modules/.vite/deps/react-router-dom.js?v=e8aea50f' does not provide an export named 'useHistory'
        • 開發報錯:TypeError: Cannot destructure property 'basename' of 'React.useContext(...)'
        • 開發踩坑: 配置好之后路由更新了,頁面沒有更新。
        • 開發踩坑: react使用antd中刷新頁面時候 ,布局有閃爍,查找發現使用Sider標簽加載頁面會有閃爍

1. 安裝vite并創建一個react項目

使用 NPM:

npm create vite@latest

使用 Yarn:

 yarn create vite

使用 PNPM:

 pnpm create vite

1. 我使用的 yarn安裝,基本配置項目名字, 框架react ,js

在這里插入圖片描述

2. cd vite-react進入項目目錄安裝node包并啟動項目

 yarn add install

加載之后使用啟動命令yarn run dev
在這里插入圖片描述
在這里插入圖片描述

2. 安裝引入Ant Design

  • 引入依賴(我用的yarn,沒有安裝的也可以使用npm,根據自己情況選擇)

使用 npm:

 yarn add antd

使用 yarn:

npm install antd --save

安裝完成:
在這里插入圖片描述

  • 使用啟動命令:yarn run dev 或者npm run dev

在這里插入圖片描述
在這里插入圖片描述

import { Button } from 'antd';
function App() {return (<><Button type="primary">Button</Button></>)
}
export default App

3. 頁面顯示:

在這里插入圖片描述

3. 引入布局和菜單欄

在這里插入圖片描述

1. 引入布局組件

1. 代碼

import React, { useState } from 'react';
import './App.css'
import { Button,Sider,Layout,Header,Space } from 'antd';
const headerStyle = {textAlign: 'letft',color: '#fff',height: 64,paddingInline: 10,lineHeight: '64px',backgroundColor: '#7dbcea',
};
const contentStyle = {textAlign: 'center',minHeight: 120,lineHeight: '120px',color: '#fff',backgroundColor: '#108ee9',
};
const siderStyle = {textAlign: 'center',lineHeight: '120px',color: '#fff',backgroundColor: '#3ba0e9',
};
const App = () => {return (<Layout><Sider style={siderStyle}></Sider><Layout><Header style={headerStyle}></Header><Content style={contentStyle}>Content</Content></Layout></Layout>);
};
export default App;

報錯:Uncaught SyntaxError: The requested module '/node_modules/.vite/deps/antd.js?v=d0b75d53' does not provide an export named 'Header' (at App.jsx:3:36)

是因為引入方式不對:修改成就可以了,官網有我沒注意

import { Button, Layout, Space } from 'antd';
const { Header, Sider, Content } = Layout;

運行后發現多了默認樣式外邊距,修改默認樣式

在這里插入圖片描述
使用在App.css中添加下面代碼,就解決了。

/* 更改默認樣式 */
body {margin: 0;
}

在這里插入圖片描述

2. 引入左側菜單欄組件

?? 1. 代碼(手寫代碼在最后)

在這里插入圖片描述
在這里插入圖片描述

📖 2. 運行后,點擊按鈕沒反應

在這里插入圖片描述

報錯:warning.js:19 Warning: [antd: Menu] inlineCollapsed not control Menu under

是因為位置設置錯誤,在Sider標簽上添加collapsed={collapsed}就可以了
![在這里插入圖片描述](https://img-blog.csdnimg.cn/15149d6dbab145ba9a4c82209e7d46
d6.png)

📖 重新運行

在這里插入圖片描述

在這里插入圖片描述

3. 調整布局樣式

?? 1. 新建src/views/index.jsx。把原來App.jsx文件內容轉移到新建的src/views/index.jsx中, 對App修改如下。注意引入jsx文件名字要大寫

在這里插入圖片描述

📖 2. 運行后樣式

在這里插入圖片描述

4. 添加動態路由設置

1. 集中react-router對比

* React-Router:

是一個通用的路由庫,適用于不同平臺的 React 應用。 提供了一些router的核心API,包括Router, Route,
Switch等,但是它沒有提供 DOM 操作進行跳轉的API。

* React-Router-DOM:

而 React Router DOM 是 React Router 的 Web 版本,提供了與瀏覽器環境相關的路由組件和功能。 提供了
BrowserRouter,HashRouter , Route, Link等 API,可以直接操作DOM 的事件控制路由。如點擊按鈕。
React Router DOM 是在 React Router 基礎上構建的,用于在 Web 應用中處理路由。它提供了與瀏覽器 URL
相關的功能,如基于瀏覽器歷史記錄的導航等。

* Reach Router:

它提供了類似于 React Router 的功能,但具有更簡單的 API 和更好的可訪問性支持。

2. 三種路由模式:HashRouter、BrowserRouter 和 MemoryRouter 都是 React Router 提供的路由組件

  1. HashRouter組件:路徑上有"#",
    它使用 URL 的哈希部分(#)來管理路由。在使用 HashRouter 時,URL 中的哈希部分將被用作路由路徑,不會觸發瀏覽器的頁面刷新。這種方式適用于靜態網站或需要在不同環境中部署的應用。

  2. BrowserRouter組件:路徑上沒有"#"
    它使用 HTML5 的 History API 來管理路由。

  3. MemoryRouter:
    它將路由信息存儲在內存中,而不是 URL 中。MemoryRouter 適用于在內存中管理路由狀態,例如在測試環境中進行單元測試或在非瀏覽器環境中使用 React Router。

2. 安裝/使用 React-Router-DOM

文檔:React-Router官方文檔可參考

* 安裝/引用:

  1. 安裝:yarn add react-router-dom
    在這里插入圖片描述

  2. 引用:import { BrowserRouter, Route, Link } from 'react-router-dom';

在這里插入圖片描述

* 在導航組件中使用。 也可以新建routerAdmin.jsx作為管理router文件

動態路由完整代碼

?? 1. router文件

在這里插入圖片描述

?? 2. App.jsx代碼
import React, { useState } from 'react';///---引入ui-組件庫
import { Button, Menu, Layout } from 'antd';
import {MenuFoldOutlined,MenuUnfoldOutlined,
} from '@ant-design/icons';
///---引入路由組件
import { Routes, Route, BrowserRouter } from 'react-router-dom';
import myRouter from './router/index'const App = () => {///---頁面邏輯const { Header, Sider, Content } = Layout;// --- 左側導航欄顯示隱藏邏輯const [collapsed, setCollapsed] = useState(false);const toggleCollapsed = () => {setCollapsed(!collapsed);};return (<BrowserRouter><Layout hasSider={true}><Sider style={{textAlign: 'center',color: '#333',backgroundColor: '#fff',}} collapsed={collapsed} ><Menumode="inline"items={myRouter}defaultSelectedKeys={['/purchase']} //默認選中keyonClick={(e) => {console.log(e)}}style={{ height: '100%', }}></Menu></Sider><Layout><Header style={{textAlign: 'letft',color: '#fff',height: 50,paddingInline: 10,lineHeight: '50px',backgroundColor: '#fff',}}><Buttontype="primary"onClick={toggleCollapsed}style={{marginBottom: 16,}}>{collapsed ? <MenuUnfoldOutlined /> : <MenuFoldOutlined />}</Button></Header><Content style={{height: '100vh',textAlign: 'center',lineHeight: '120px',backgroundColor: '#fff',borderBottom: '1px solid #333'}}><Routes><Route exact path="/" element={<Purchase />} /><Route exact path="/purchase" element={<Purchase />} /><Route exact path="/inventory" element={<Inventory />} /><Route exact path="/roles" element={<RoleList />} /><Route exact path="/roles/new" element={<NewRole />} /><Route exact path="/settings/theme" element={<ThemeSettings />} /></Routes></Content></Layout></Layout></BrowserRouter>);
};const Purchase = () => {return <h1>Purchase Page</h1>;
};const Inventory = () => {return <h1>Inventory Page</h1>;
};const RoleList = () => {return <h1>Role List Page</h1>;
};const NewRole = () => {return <h1>New Role Page</h1>;
};const ThemeSettings = () => {return <h1>Theme Settings Page</h1>;
};
export default App;
📖 3.運行后頁面效果

react-vite-antd環境下新建項目之菜單欄和導航使

開發中報錯:warning.js:19 Warning: [antd: Menu] children will be removed in next major version. Please use items instead.

Ant Design 的 Menu 組件的 children 屬性將在下一個主要版本中被移除。這意味著在未來的版本中,你應該使用 items 屬性來傳遞菜單項,而不是直接使用 Menu.Item 組件作為 Menu 組件的子元素。
如下新版本中使用時不對的:
在這里插入圖片描述
修改成如下:

 <Menumode="inline"theme="dark"items={items}onClick={onClick}defaultSelectedKeys={['1']}defaultOpenKeys={['sub1']}>
</Menu>

開發中報錯:index.jsx:14 Uncaught SyntaxError: The requested module ‘/node_modules/.vite/deps/react-router-dom.js?v=e8aea50f’ does not provide an export named ‘useHistory’

  1. 沒有使用最新版本的“react-router-dom”模塊,npm升級模塊:npm update react-router-dom。
  2. 當如方法不對,應該是“import { useHistory } from ‘react-router-dom’”。
  3. 如果以上兩種方式都無法解決問題,可以嘗試刪除“node_modules”文件夾,并重新安裝
  4. 如果上述方法都不能解決問題,你可以使用其他版本的“react-router-dom”模塊,或者嘗試使用其他的路由模塊。

開發報錯:TypeError: Cannot destructure property ‘basename’ of ‘React.useContext(…)’

是因為link標簽沒有被BrowserRouter標簽包裹

  <BrowserRouter>
///此處寫link邏輯就可以了
</BrowserRouter>

開發踩坑: 配置好之后路由更新了,頁面沒有更新。

發現是Route屬性使用錯誤了, <Route exact path=“/” element={} />,我把element使用成component了,改了就可以了,

開發踩坑: react使用antd中刷新頁面時候 ,布局有閃爍,查找發現使用Sider標簽加載頁面會有閃爍

是由于 Sider 組件的初始狀態導致的。Sider 組件默認是收起狀態,當它在頁面加載時展開時,可能會導致頁面內容重新布局,從而引起閃爍。官網又給出Layout 標簽屬性hasSider
在這里插入圖片描述

在這里插入圖片描述

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

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

相關文章

視頻匯聚/視頻云存儲/視頻監控管理平臺EasyCVR添加螢石云設備詳細操作來啦!

安防視頻監控/視頻集中存儲/云存儲/磁盤陣列EasyCVR平臺可拓展性強、視頻能力靈活、部署輕快&#xff0c;可支持的主流標準協議有國標GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持廠家私有協議與SDK接入&#xff0c;包括海康Ehome、海大宇等設備的SDK等。平臺既具備傳統安…

css偽元素實現li列表圓點相連+錨點跳轉懸浮窗實現

實現效果&#xff1a; html代碼&#xff1a; <div class"sidenav"><ul class"nav-text progressbar"><!-- data-target的值對應要跳轉的模塊的id --><li data-target"module1"><div class"text">錨點…

Effective Java 案例分享(九)

46、使用無副作用的Stream 本章節主要舉例了Stream的幾種用法。 案例一&#xff1a; // Uses the streams API but not the paradigm--Dont do this! Map<String, Long> freq new HashMap<>(); try (Stream<String> words new Scanner(file).tokens()) …

Java創建對象的幾種方式

在Java中&#xff0c;對象是程序中的一種基本元素&#xff0c;它通過類定義和創建。本篇教程旨在介紹Java中創建對象的幾種方式&#xff0c;包括使用new關鍵字、反射、clone、反序列化等方式。 使用new關鍵字創建對象 在Java中&#xff0c;最常用的創建對象方式是使用new關鍵…

linux學習(文件描述符)[13]

所以fork的時候函數執行完畢&#xff0c;但是數據還在緩沖區中未刷新。 所以會有父子兩份數據 在fork&#xff08;&#xff09;之前ffush&#xff08;&#xff09;&#xff08;c語言的接口&#xff0c;刷新緩沖區&#xff09;fflush(stdout)&#xff0c;就不會有重復 緩沖區的…

Trie樹(前綴樹)的實現與應用

Trie樹&#xff0c;也被稱為前綴樹&#xff0c;是一種用于處理字符串的數據結構。它可以高效地進行字符串的插入、刪除和搜索操作&#xff0c;并且能夠快速找到具有相同前綴的字符串。本篇博客將詳細介紹Trie樹的實現原理和應用場景&#xff0c;并給出Java代碼示例。 Trie樹的…

MyBatis的入門級環境搭建及增刪改查,詳細易懂

目錄 一.mybatis的簡介 二.MyBatis的環境搭建 2.1 導入pom依賴 2.2 數據庫文件導入連接 2.3 修改web.xml文件 2.4 安裝插件 2.5 配置文件 2.5.1 mybatis.cfg.xml文件 2.5.2 generatorConfig.xml文件 2.6 最后測試生成代碼 三.MyBatis的增刪改查 3.1 寫service類&#xff…

Linux命令200例:nc非常有用的網絡工具(常用)

&#x1f3c6;作者簡介&#xff0c;黑夜開發者&#xff0c;全棧領域新星創作者?。CSDN專家博主&#xff0c;阿里云社區專家博主&#xff0c;2023年6月csdn上海賽道top4。 &#x1f3c6;數年電商行業從業經驗&#xff0c;歷任核心研發工程師&#xff0c;項目技術負責人。 &…

【LVS】3、LVS+Keepalived群集

為什么用它&#xff0c;為了做高可用 服務功能 1.故障自動切換 2.健康檢查 3.節點服務器高可用-HA Keepalived的三個模塊&#xff1a; core&#xff1a;Keepalived的核心&#xff0c;負責主進程的啟動、維護&#xff1b;調用全局配置文件進行加載和解析 vrrp&#xff1a;實…

matlab使用教程(16)—圖論中圖的定義與修改

1.修改現有圖的節點和邊 此示例演示如何使用 addedge 、 rmedge 、 addnode 、 rmnode 、 findedge 、 findnode 及 subgraph 函數訪問和修改 graph 或 digraph 對象中的節點和/或邊。 1.1 添加節點 創建一個包含四個節點和四條邊的圖。s 和 t 中的對應元素用于指定每條…

使用 MBean 和 日志查看 Tomcat 線程池核心屬性數據

文章目錄 CustomTomcatThreadPoolMBeanCustomTomcatThreadPool CustomTomcatThreadPoolMBean com.qww.config;public interface CustomTomcatThreadPoolMBean {String getStatus(); }CustomTomcatThreadPool package com.qww.config;import com.alibaba.fastjson.JSON; impor…

三本書與三場發布會,和鯨社區重新定義編程類書籍從閱讀到實踐新體驗

當 AI 開發者社區配備 AI 基礎設施開發平臺工具時&#xff0c;它還能做什么&#xff1f; 答案是&#xff1a;過去半年&#xff0c;和鯨社區憑借在氣象、醫學、社科等垂直領域的長期積累以及多方伙伴的支持&#xff0c;聯合舉辦了三場新書發布會——從 Python 到 R 語言 、從氣…

Midjourney Prompt 提示詞速查表 v5.2

Midjourney 最新的版本更新正不斷推出令人興奮的新功能。這雖然不斷擴展了我們的AI繪圖工具箱&#xff0c;但有時也會讓我們難以掌握所有實際可以使用的功能和參數。 針對此問題, 小編整理了 "Midjourney Prompt 提示詞速查表"&#xff0c;這是一個非常方便的 Midjo…

Java“牽手“拼多多商品詳情頁面數據獲取方法,拼多多API實現批量商品數據抓取示例

拼多多商城是一個網上購物平臺&#xff0c;售賣各類商品&#xff0c;包括服裝、鞋類、家居用品、美妝產品、電子產品等。要獲取拼多多商品詳情數據&#xff0c;您可以通過開放平臺的接口或者直接訪問拼多多商城的網頁來獲取商品詳情信息。以下是兩種常用方法的介紹&#xff1a;…

Linux:shell腳本數組和腳本免交互

目錄 一、shell數組的定義 二、定義數組的方式 &#xff08;1&#xff09;數組名(value1 value2 value3 value4 ...) &#xff08;2&#xff09;獲取數組的長度 &#xff08;3&#xff09;獲取數組下標對應的值 &#xff08;4&#xff09;數組的遍歷 &#xff08;5&#x…

qsort函數詳解

大家好&#xff0c;我是蘇貝&#xff0c;本篇博客帶大家了解qsort函數&#xff0c;如果你覺得我寫的不錯的話&#xff0c;可以給我一個贊&#x1f44d;嗎&#xff0c;感謝?? 文章目錄 一. qsort函數參數詳解1.數組首元素地址base2.數組的元素個數num和元素所占內存空間大小w…

ThreeJS——在3D地球上標記中國地圖板塊

Threejs3D地球標記中國地圖位置 先看效果 地球預覽視頻效果 用到的庫 TweenJS (動畫庫)用來做相機轉場的動畫Jquery(這里只用到一個 each 循環方法&#xff0c;可以使用 js 去寫)ThreeJS (3D 地球制作)100000.json(全國城市經緯度)d3.v6.js用來設置平面轉3D效果(本來考慮做成…

深入解析IDS/IPS與SSL/TLS和網絡安全

目錄 防火墻 IDS IPS DMZ VPN VPS SSL/TLS 動態IP 靜態IP 防火墻 防火墻是一種網絡安全設備&#xff0c;用于監控和控制網絡流量&#xff0c;保護網絡免受未經授權的訪問、惡意攻擊和威脅。防火墻可以基于規則進行數據包過濾&#xff0c;允許或阻止特定類型的流量通過…

Lead-Lag控制器形式

對于Lead-Lag&#xff08;超前—滯后&#xff09;&#xff0c;有的地方叫做控制器 Controller&#xff0c;有的地方叫補償器 Compensator&#xff0c;有的地方叫濾波器 Filter&#xff0c;都是一個東西。 Lead-Lag也有幾種不同的形式&#xff0c;一種是 G c ( s ) 1 a T s 1…

QT設置widget背景圖片

首先說方法&#xff0c;在給widget或者frame或者其他任何類型的控件添加背景圖時&#xff0c;在樣式表中加入如下代碼&#xff0c;指定某個控件&#xff0c;設置其背景。 類名 # 控件名 { 填充方式&#xff1a;圖片路徑 } 例如&#xff1a; QWidget#Widget {border-image: url…