react.js框架Redux基礎(chǔ)案例詳解
react.js框架Redux
https://github.com/reactjs/redux
安裝:
npm install redux react-redux #基于react,我們?cè)谇懊嬉呀?jīng)安裝過(guò)了
Redux參考文檔:
http://redux.js.org/
Redux核心概念:Store
我們可以簡(jiǎn)單的理解為就是用來(lái)存儲(chǔ) 各個(gè)組件的State或你自己定義的獨(dú)立的state,對(duì)state進(jìn)行統(tǒng)一讀取、更新、監(jiān)聽等操作。
http://redux.js.org/docs/basics/Store.html

Reduce
官方告訴我們r(jià)edux的基本使用如下:
import {createStore} from "redux";
import todoApp from "./reducers";
let store = createStore(todoApp);
createStore()參數(shù)傳入的是一個(gè)函數(shù)Function。
在redux里的概念叫做:Reduce
Reduce的基本形式:
function myFun(state,action){
// ...
}
當(dāng)然我們也可以使用esmascript 2015的箭頭函數(shù)形式來(lái)定義。
實(shí)戰(zhàn)演練
1、我們先來(lái)定義一個(gè)Reduce
InfoReduce.js:
//測(cè)試數(shù)據(jù)
let info = {
title:"測(cè)試標(biāo)題",
clicknum:0
};
// 把數(shù)據(jù)通過(guò)參數(shù)船體
export default (state = info, action)=>{
return state; //返回的就是測(cè)試數(shù)據(jù)
}
2、Reduce準(zhǔn)備完成,我們開始使用 Redux
import InfoReduce from "./../redux/InfoReduce";
import {createStore} from "redux";
let store = createStore(InfoReduce);
3、Redux中很重要的概念store已經(jīng)創(chuàng)建,我們看看在組件里如何使用?
// 定義一個(gè)名叫InfoDetail的組件
class InfoDetail extends React.Component{
// 構(gòu)造
constructor(props) {
super(props);
// 初始狀態(tài)
this.state = {
infoData:store.getState() //通過(guò)store對(duì)象的方法獲取數(shù)據(jù)
};
}
render(){
return <div>
<h2>新聞標(biāo)題:{this.state.infoData.title}</h2>
<span>點(diǎn)擊量:{this.state.infoData.clicknum}</span>
<p><button>修改點(diǎn)擊量</button></p>
</div>
}
}
通過(guò)store.getState()獲取數(shù)據(jù)。

到這里我們基本明白了:Reducers就是規(guī)定的一種函數(shù),它產(chǎn)生新的state然后傳遞給Store;我們的組件通過(guò)Store來(lái)獲取state更新組件數(shù)據(jù)。
了解action
官方文檔對(duì)action的說(shuō)明:
http://redux.js.org/docs/basics/Actions.html
其實(shí)通過(guò)action這個(gè)單詞我們可以猜測(cè)到是用來(lái)處理業(yè)務(wù)的操作。
在我們前面的代碼中,哪里還有action?
我們定義Reducer函數(shù)的時(shí)候,第二個(gè)參數(shù)就是:
export default (state, action)=>{}
1、既然action是操作,表示我們組件上事件處理函數(shù)中需要它
<button onClick={this.addClick.bind(this)}>修改點(diǎn)擊量</button>
給按鈕綁定一個(gè)點(diǎn)擊事件的函數(shù)addClick
2、下面來(lái)看看 addClick 函數(shù)里有什么乾坤?
addClick(){
//修改state
store.dispatch({
type:"INFO_CLICK"
})
this.setState({ //更新state
infoData:store.getState()
})
}
this.setState()我們前面學(xué)過(guò)這是用來(lái)更新狀態(tài)(state);
store.dispatch()這又是我們Redux里的東東了,這個(gè)方法其實(shí)就的調(diào)度action的。
通過(guò)type來(lái)區(qū)分。
3、根據(jù)我們的需求,我們的action要處理的業(yè)務(wù)邏輯是 對(duì)clicknum增加
//測(cè)試數(shù)據(jù)
let info = {
title:"測(cè)試標(biāo)題",
clicknum:0
};
// 把數(shù)據(jù)通過(guò)參數(shù)船體
export default (state = info, action)=>{
if (action.type == "INFO_CLICK"){
let oldNum = state.clicknum;
oldNum++;
// 返回新的數(shù)據(jù)
return Object.assign({},state,{clicknum:oldNum});
}
return state; //返回的就是測(cè)試數(shù)據(jù)
}
我們的Reducer函數(shù)中,通過(guò)action.type來(lái)判斷,然后處理業(yè)務(wù)邏輯相關(guān)。
到這里,我們可能迷惑了,Redux怎么還麻煩了,是的,一般是在業(yè)務(wù)邏輯很復(fù)雜的項(xiàng)目才使用的

到此這篇關(guān)于react.js框架Redux基礎(chǔ)案例詳解的文章就介紹到這了,更多相關(guān)react.js框架Redux基礎(chǔ)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
全棧輕量級(jí)搭配之Remix Prisma Sqlite使用分析
這篇文章主要為大家介紹了全棧輕量級(jí)搭配之Remix Prisma Sqlite使用示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
比ant更豐富Modal組件功能實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了比ant更豐富Modal組件功能實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
react.js組件實(shí)現(xiàn)拖拽復(fù)制和可排序的示例代碼
這篇文章主要介紹了react.js組件實(shí)現(xiàn)拖拽復(fù)制和可排序的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
react嵌套路由實(shí)現(xiàn)TabBar的實(shí)現(xiàn)
本文主要介紹了react嵌套路由實(shí)現(xiàn)TabBar的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08

