React中react-redux和路由詳解
觀察者模式解決組件間通信問題
使用觀察者解決組件間通信,分成兩步
- 在一個(gè)組件中,訂閱消息
- 在另一個(gè)組件中,發(fā)布消息
發(fā)布消息之后,訂閱的消息回調(diào)函數(shù)會執(zhí)行,在函數(shù)中,我們修改狀態(tài),這樣就可以實(shí)現(xiàn)組件間通信了。這就是reflux框架的實(shí)現(xiàn)。
react-redux
redux早期被設(shè)計(jì)成可以在各個(gè)框架中使用,因此在不同的框架中使用的時(shí)候,要引入相應(yīng)的插件
在react中使用要引入react-redux,因此我們要安裝這個(gè)模塊
npm install react-redex
react-redux提供了一個(gè)方法和一個(gè)組件:

connect方法
為組件的屬性拓展store中的信息(state,dispatch)的方法
connect方法有兩個(gè)參數(shù),都是函數(shù)
第一個(gè)參數(shù)表示如何為組件的屬性拓展store中的state數(shù)據(jù)
參數(shù)是state
返回值是對象,就是為屬性拓展的數(shù)據(jù)
第二個(gè)參數(shù)表示如何為組件的屬性拓展store中的dispatch方法
參數(shù)就是dispatch
返回值是對象,就是為屬性拓展的方法
connect方法的返回值是一個(gè)新方法,就是為組件拓展的方法。
參數(shù)是組件
返回值是新組件,這個(gè)新的組件就擁有了state數(shù)據(jù)和dispatch方法了
Provider組件
用來為應(yīng)用程序提供store對象的組件
store屬性,就是綁定添加的store
Provider組件中我們可以渲染應(yīng)用程序組件
在應(yīng)用程序中,這些被connect方法處理的組件就會接收store中的數(shù)據(jù)了
注意:只有通過connect的處理方法處理之后的組件具有state和dispatch,其他的組件沒有這些信息
想讓其它組件具有store中的state和dispatch,有兩種途徑:
- 第一種,具有state數(shù)據(jù)和dispatch方法的組件中,向子組件傳遞(最常用)
- 第二種,再用處理方法,處理其他的組件。
路由
從14版本開始,react路由為了實(shí)現(xiàn)react多端適配的理想,將react路由拆分成不同類型的。
例如在web端要使用web端路由,在native端要使用nativate路由等等
我們開發(fā)web端,要安裝react-router-dom路由
npm install react-router-dom
使用路由
使用路由分成三步:
第一步 定義路由渲染容器元素(渲染位置)
- 可以通過Swtich組件定義
- 可以通過Route組件定義每一條路由規(guī)則
- path 定義路由規(guī)則
- component定義路由渲染的組件
- name 定義路由的名稱
第二步 定義路由的渲染方式(規(guī)則)
常用的有兩種:
- BrowserRouter:基于path,實(shí)現(xiàn)的路由規(guī)則,需要服務(wù)器端的配合
- HashRouter:基于hash,實(shí)現(xiàn)的路由規(guī)則,不需要服務(wù)器端配合
- 我們通過路由渲染模式組件,渲染應(yīng)用程序
- 將應(yīng)用程序組件,定義在該組件內(nèi)
第三步 用render方法,渲染第二步得到的結(jié)果

默認(rèn)路由
在react路由中,讓path匹配*,即可定義默認(rèn)路由
由于??*??匹配的非常廣,因此我們常常把它配置在最后面
路由重定向
我們通過Redirect組件定義重定向路由
from定義匹配的規(guī)則
to定義重定向的規(guī)則
獲取路由參數(shù)
在react中,我們??使用路由的組件??,會自動拓展一些屬性
history表示對全局的history歷史對象的模擬
location表示對全局的location對象的模塊,但是只是處理路由這一部分
match表示路由數(shù)據(jù)對象(解析后的數(shù)據(jù),因此工作中常用)
其他沒有通過路由渲染的組件是不具備這些信息,想具有這些信息,我們可以通過組件間通信的技術(shù),依次傳遞這些數(shù)據(jù)信息
路由導(dǎo)航
我們通過Link組件定義路由導(dǎo)航
通過to屬性定義導(dǎo)航地址,即使是hash路由也不要加#
默認(rèn)渲染成a標(biāo)簽
舉例:
// 引入路由
import { Switch, Route, HashRouter, Redirect, Link } from 'react-router-dom';
// 應(yīng)用程序
class App extends Component {
render() {
console.log('app', this)
return (
<div>
<h1>app</h1>
{/*導(dǎo)航*/}
<Link to="/home">首頁</Link>
<Link to="/list/17">列表頁</Link>
<Link to="/detail/17">詳情頁</Link>
{/*第一步 定義路由渲染位置*/}
<Switch>
{/*Route定義規(guī)則*/}
<Route path="/home" component={Home}></Route>
<Route path="/list/:page" component={List}></Route>
<Route path="/detail/:id" component={Detail}></Route>
{/*輸入ickt進(jìn)入detail/ickt詳情頁*/}
<Redirect from="/ickt" to="/detail/ickt"></Redirect>
{/*默認(rèn)路由*/}
<Route path="*" component={Home}></Route>
</Switch>
</div>
)
}
}
// 首頁
class Home extends Component {
render() {
console.log('home', this)
return (
<div>
<h1>home</h1>
</div>
)
}
}
// 列表頁
class List extends Component {
render() {
console.log('list', this)
return (
<div>
<h1>list</h1>
</div>
)
}
}
// 詳情頁
class Detail extends Component {
render() {
console.log('detail', this)
// 解構(gòu)數(shù)據(jù)
let { history, match } = this.props;
return (
<div>
<h1>detail</h1>
<Demo history={history} match={match}></Demo>
</div>
)
}
}
// 詳情頁
class Demo extends Component {
render() {
console.log('demo', this)
return (
<div>
<h2>demo</h2>
</div>
)
}
}
// 第二步 確定渲染方式
let routes = (
<HashRouter>
<App></App>
</HashRouter>
)
// 第三步 渲染第二步結(jié)果
render(routes, app)到此這篇關(guān)于React中react-redux和路由詳解的文章就介紹到這了,更多相關(guān)React react-redux 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
react-native使用react-navigation進(jìn)行頁面跳轉(zhuǎn)導(dǎo)航的示例
本篇文章主要介紹了react-native使用react-navigation進(jìn)行頁面跳轉(zhuǎn)導(dǎo)航的示例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09
React中獲取數(shù)據(jù)的3種方法及優(yōu)缺點(diǎn)
這篇文章主要介紹了React中獲取數(shù)據(jù)的3種方法及優(yōu)缺點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
react數(shù)據(jù)管理中的setState與Props詳解
setState?是?React?中用于更新組件狀態(tài)(state)的方法,本文給大家介紹react數(shù)據(jù)管理中的setState與Props知識,感興趣的朋友跟隨小編一起看看吧2023-10-10
react清空ant.design中表單內(nèi)容的方法實(shí)現(xiàn)
本文主要介紹了react清空ant.design中表單內(nèi)容的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12
react-native 封裝視頻播放器react-native-video的使用
本文主要介紹了react-native 封裝視頻播放器react-native-video的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01

