React第三天學(xué)習(xí)

內(nèi)容:生命周期证舟、路由

一、生命周期

1.頁面渲染期

constructor 構(gòu)造函數(shù)

UNSAFE_componentWillMount 組件將要掛載

render 頁面渲染

componentDidMount 組件掛載

2.頁面更新期

UNSAFE_componentWillReceiveProps 子組件將要接收父組件傳遞的動(dòng)態(tài)數(shù)據(jù)

shouldComponetUpdate 是否要更新數(shù)據(jù)

UNSAFE_componentWillUpdate 組件將要更新數(shù)據(jù)

render 頁面渲染

componentDidUpdate 組件更新完成

3.頁面卸載

componentWillUnmount 組件將要卸載

二窗骑、路由【重點(diǎn)】

作用:能夠根據(jù)瀏覽器地址的變化來展示不同的組件內(nèi)容褪储,從而實(shí)現(xiàn)項(xiàng)目規(guī)模化開發(fā)慧域。

1.安裝

npm install react-router-dom --save

2.引用

(1)在項(xiàng)目根目錄的src/index.js文件中增加react-router-dom的引入

import { BrowserRouter } from 'react-router-dom'
ReactDOM.render(<BrowserRouter><App /></BrowserRouter>, document.getElementById('root'));

3.路由使用

(1)基本使用

第一步:創(chuàng)建頁面組件

第二步:在需要使用路由的頁面中引入頁面組件和路由組件(Switch鲤竹、Route)

Switch 路由出口

Route 路由規(guī)則

import React from 'react';
import './App.css';
// 引入頁面組件
import Home from './components/Home' 
import Order from './components/Order' 
// 引入路由相關(guān)組件
import { Switch,Route } from 'react-router-dom'
function App() {
    return (
        <div className="container">
            {/* 路由出口(可視區(qū)) */}
            <Switch>
                {/* 路由規(guī)則 */}
                <Route path="/home" component={ Home }></Route>
                <Route path="/order" component={ Order }></Route>
            </Switch>
        </div>
    );
}
export default App;

就可以通過瀏覽器地址的變化來展示不同的組件內(nèi)容。

(2)重定向

從react路由中引出Redirect組件

import { Switch,Route,Redirect } from 'react-router-dom'
function App() {
    return (
        <div className="container">
            {/* 路由出口(可視區(qū)) */}
            <Switch>
                {/* 路由規(guī)則 */}
                <Route path="/home" component={ Home }></Route>
                <Route path="/order" component={ Order }></Route>
                <Redirect to="/home"></Redirect>
            </Switch>
        </div>
    );
}

(3)路由導(dǎo)航

①內(nèi)置標(biāo)簽

Link

NavLink

Link和NavLink都會(huì)在頁面上生成一個(gè)a標(biāo)簽昔榴,都需要設(shè)置to屬性(目標(biāo)路由規(guī)則地址)辛藻,但是Link標(biāo)簽沒有選中類名,NavLink有選中類名互订。NavLink有一個(gè)非必填選項(xiàng)activeClassName吱肌,用來設(shè)置當(dāng)前選中的標(biāo)簽的類名。

②編程式導(dǎo)航

通過this.props.history

push 把當(dāng)前的路由規(guī)則進(jìn)行記錄并跳轉(zhuǎn)到指定的路由規(guī)則中

replace 用指定的路由規(guī)則替換當(dāng)前訪問的路由規(guī)則仰禽,然后進(jìn)行頁面跳轉(zhuǎn)

go 返回到指定層級(jí)的頁面中氮墨,一般寫-1,表示回退到上一個(gè)頁面中

goBack 回退到上一個(gè)訪問的頁面中

(4)路由嵌套

第一步:創(chuàng)建頁面組件

第二步:指定的一級(jí)路由規(guī)則對(duì)應(yīng)的頁面中引入子級(jí)頁面組件吐葵,并定義子級(jí)路由規(guī)則

注意:子級(jí)路由規(guī)則的path屬性必須包含一級(jí)路由規(guī)則名

/引入子級(jí)頁面組件
import Food from './Food'
import Movie from './Movie'
//定義子級(jí)路由規(guī)則
<Switch>
     <Route path="/home/food" component={ Food }></Route>
     <Route path="/home/movie" component={ Movie }></Route>
</Switch>

(5)動(dòng)態(tài)路由

4.路由代碼優(yōu)化

現(xiàn)在在根組件和首頁組件分別取寫了<Switch></Switch>和<Route></Route>來實(shí)現(xiàn)路由的基本使用规揪。但是如果項(xiàng)目規(guī)模變大了,上面的方式的可維護(hù)性和復(fù)用性不高温峭。為了解決這個(gè)問題猛铅,我們要把<Switch>一系列組件做成一個(gè)公用組件,然后通過組件傳值來實(shí)現(xiàn)創(chuàng)建不同的路由規(guī)則凤藏。

在/src/router/index.js奸忽,創(chuàng)建一個(gè)公用的組件,根據(jù)傳遞的來生成路由規(guī)則揖庄。

import React from 'react'
/**
 * 函數(shù)組件
 *  根據(jù)傳遞的數(shù)據(jù)栗菜,來生成不同的路由規(guī)則
 */
import { Switch,Route,Redirect } from 'react-router-dom'
const router = (props)=>{
    var els = props.data.map((item,index)=>{
        return(
            <Route key={ index } path={ item.path } component={ item.component }></Route>
        )
    })
    return(
        <Switch>
            {els}
        </Switch>
    )
}
export default router;

然后在/src/router/AppRouters.js來定義一級(jí)路由規(guī)則

import Home from '../components/Home'
import Order from '../components/Order'
import My from '../components/My'
var AppRoutes = [
    {
        path:'/home',
        component:Home
    },
    {
        path:'/order',
        component:Order
    },
    {
        path:'/my',
        component:My
    }
];
export default AppRoutes;

在src/App.js使用

//引入一級(jí)路由配置
import AppRoutes from './router/AppRoutes'
//引入路由共用組件
import Router from './router'

<Router data={ AppRoutes }></Router>

定義首頁的二級(jí)路由規(guī)則

/src/router/HomeRoutes.js

import Food from '../components/Food'
import Movie from '../components/Movie'
var HomeRoutes = [
    {
        path:'/home/food',
        component:Food
    },
    {
        path:'/home/movie',
        component:Movie
    }
]
export default HomeRoutes;

在src/components/Home.js使用

import HomeRoutes from '../router/HomeRoutes'
import MyRouter from '../router'

<Router data={ HomeRoutes }></Router>

三、作業(yè)

用react實(shí)現(xiàn)一個(gè)后臺(tái)管理系統(tǒng)靜態(tài)頁面(仿照Vue商城后臺(tái)項(xiàng)目)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蹄梢,一起剝皮案震驚了整個(gè)濱河市疙筹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖腌歉,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛙酪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡翘盖,警方通過查閱死者的電腦和手機(jī)桂塞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馍驯,“玉大人阁危,你說我怎么就攤上這事√保” “怎么了狂打?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長混弥。 經(jīng)常有香客問我趴乡,道長,這世上最難降的妖魔是什么蝗拿? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任晾捏,我火速辦了婚禮,結(jié)果婚禮上哀托,老公的妹妹穿的比我還像新娘惦辛。我一直安慰自己,他們只是感情好仓手,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布胖齐。 她就那樣靜靜地躺著,像睡著了一般嗽冒。 火紅的嫁衣襯著肌膚如雪呀伙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天辛慰,我揣著相機(jī)與錄音区匠,去河邊找鬼干像。 笑死帅腌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的麻汰。 我是一名探鬼主播速客,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼五鲫!你這毒婦竟也來了溺职?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浪耘,沒想到半個(gè)月后乱灵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡七冲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年痛倚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澜躺。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝉稳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掘鄙,到底是詐尸還是另有隱情耘戚,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布操漠,位于F島的核電站收津,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏浊伙。R本人自食惡果不足惜朋截,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吧黄。 院中可真熱鬧部服,春花似錦、人聲如沸拗慨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赵抢。三九已至剧蹂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烦却,已是汗流浹背宠叼。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留其爵,地道東北人冒冬。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像摩渺,于是被迫代替她去往敵國和親简烤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容