路由的使用 "react router" 其中一個組件 獲取路由參數 "Ant design" 使用在上面的代碼有體現 按需導入配置 .baelrc "electron技術" ...
路由的使用
import React from 'react'
// 如果要使用 路由模塊,第一步,運行 yarn add react-router-dom
// 第二步,導入 路由模塊
// HashRouter 表示一個路由的跟容器,將來,所有的路由相關的東西,都要包裹在 HashRouter 裡面,而且,一個網站中,只需要使用一次 HashRouter 就好了;
// Route 表示一個路由規則, 在 Route 上,有兩個比較重要的屬性, path component
// Link 表示一個路由的鏈接 ,就好比 vue 中的 <router-link to=""></router-link>
import { HashRouter, Route, Link } from 'react-router-dom'
import Home from './components/Home.jsx'
import Movie from './components/Movie.jsx'
import About from './components/About.jsx'
// 導入 日期選擇組件
import { DatePicker } from 'antd'
export default class App extends React.Component {
constructor(props) {
super(props)
this.state = {}
}
render() {
// 當 使用 HashRouter 把 App 根組件的元素包裹起來之後,網站就已經啟用路由了
// 在一個 HashRouter 中,只能有唯一的一個根元素
// 在一個網站中,只需要使用 唯一的一次 <HashRouter></HashRouter> 就行了
return <HashRouter>
<div>
<h1>這是網站的APP根組件</h1>
<DatePicker></DatePicker>
<hr />
<Link to="/home">首頁</Link>
<Link to="/movie/top250/10">電影</Link>
<Link to="/about">關於</Link>
<hr />
{/* Route 創建的標簽,就是路由規則,其中 path 表示要匹配的路由,component 表示要展示的組件 */}
{/* 在 vue 中有個 router-view 的路由標簽,專門用來放置,匹配到的路由組件的,但是,在 react-router 中,並沒有類似於這樣的標簽,而是 ,直接把 Route 標簽,當作的 坑(占位符) */}
{/* Route 具有兩種身份:1. 它是一個路由匹配規則; 2. 它是 一個占位符,表示將來匹配到的組件都放到這個位置, 如果想讓路由規則,進行精確匹配,可以為 Route,添加 exact 屬性,表示啟用精確匹配模式 */}
<Route path="/home" component={Home}></Route>
<hr />
{/* 註意:預設情況下,路由中的規則,是模糊匹配的,如果 路由可以部分匹配成功,就會展示這個路由對應的組件 */}
{/* 如果要匹配參數,可以在 匹配規則中,使用 : 修飾符,表示這個位置匹配到的是參數 */}
<Route path="/movie/:type/:id" component={Movie} exact></Route>
<hr />
<Route path="/about" component={About}></Route>
</div>
</HashRouter>
}
}
其中一個組件
獲取路由參數
import React from 'react'
export default class Movie extends React.Component {
constructor(props) {
super(props)
this.state = {
routeParams: props.match.params
}
}
render() {
console.log(this);
// 如果想要從路由規則中,提取匹配到的參數,進行使用,可以使用 this.props.match.params.*** 來訪問
return <div>
{/* Movie --- {this.props.match.params.type} --- {this.props.match.params.id} */}
Movie --- {this.state.routeParams.type} --- {this.state.routeParams.id}
</div>
}
}
Ant design
使用在上面的代碼有體現
// JS打包入口文件
// 1. 導入包
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App.jsx'
// 全局導入 Ant Design 的樣式表
// 一般,我們使用的 第三方UI組件,它們的樣式表文件,都是 以 .css 結尾的,所以,我們最好不要為 .css 尾碼名的文件,啟用 模塊化;
// 我們推薦自己不要直接手寫 .css 的文件,而是自己手寫 scss 或 less 文件,這樣,我們只需要為 scss 文件 或 less 文件啟用模塊化就好了;
// 由於 直接使用 Ant Design 的全部包,體積過大,所以,建議大家使用 按需導入,這樣,能減少 bundle.js 文件的體積
// import 'antd/dist/antd.css'
// 使用 render 函數渲染 虛擬DOM
ReactDOM.render(<App></App>, document.getElementById('app'))
按需導入配置
.baelrc
{
"presets": ["env", "stage-0", "react"],
"plugins": ["transform-runtime", ["import", { "libraryName": "antd", "style": "css" }]]
}