React-Redux使用教程

介紹

React-Redux是Redux的官方React綁定庫餐禁。它能夠使你的React組件從Redux store中讀取數(shù)據(jù)驶赏,并且向store分發(fā)actions以更新數(shù)據(jù)

用原生redux和react結(jié)合使用的時(shí)候勋锤,每次都要載入store,而且派發(fā)完action修改數(shù)據(jù)后還要調(diào)用subscribe去監(jiān)聽栽燕,在監(jiān)聽里更新事件,React-Redux規(guī)避了這些麻煩稍刀。

React-Redux的三個(gè)關(guān)鍵作用

  • 通過Provider把state注入到全局
  • 通過connect把state和dispatch注入到當(dāng)前組建的props上
  • 響應(yīng)式

安裝

yarn add react-redux

Provider

React-Redux 提供<Provider/>組件恬口,能夠使整個(gè)app訪問到Redux store中的數(shù)據(jù)。

Provider是用context封裝的弥锄。

connect

React-Redux提供一個(gè)connect方法能夠把組件和store連接起來丧靡,把state,dispatch方法籽暇,捏合到當(dāng)前組件上温治。

connect有兩個(gè)參數(shù),兩參數(shù)都是函數(shù)戒悠,參數(shù)在connect內(nèi)部被調(diào)用熬荆,參數(shù)內(nèi)能拿到state和dispatch,詳見代碼示例绸狐。

connect調(diào)用的返回結(jié)果是一個(gè)高階組件卤恳。

示例代碼

image.png
//index.js

import React from 'react';
import ReactDom from "react-dom"
//引入Provider
import {Provider} from "react-redux";

import Counter from "./counter/ReactReduxCounter";

import store from "./redux/basic/store"

ReactDom.render(
    <Provider store={store}>
        <Counter></Counter>
    </Provider>,
    document.getElementById("root")   
)
//ReactReduxCounter.js

import React, { Component } from 'react';
import {connect} from "react-redux"

//子組件
class Counter extends Component {
    //方法調(diào)用后自動(dòng)更新數(shù)據(jù)
    increment=()=>{
        this.props.increment()
    }
    decrement=()=>{
        this.props.decrement()
    }
    render() {
        return (
            <div>
                <div>{this.props.num}</div>
                
                <button onClick={this.increment}>點(diǎn)我+1</button>
                <button onClick={this.decrement}>點(diǎn)我-1</button>
            </div>
        );
    }
}

//該函數(shù)作為connect的第一個(gè)參數(shù)累盗,能拿到state
//映射state到組建的props上
function mapStateToProps(state){
    return {
        num:state.counter
    }
}

//該函數(shù)作為connect的第二個(gè)參數(shù),能拿到dispatch
//映射dispatch方法到組建的props上
function mapDispatchToProps(dispatch){
    return {
        increment(){
            dispatch({
                type:"increment"
            })
        },
        decrement(){
            dispatch({
                type:"decrement"
            })
        }
    }
}

//connet函數(shù)執(zhí)行返回一個(gè)高階組件
//調(diào)用這個(gè)高階組件突琳,傳入當(dāng)前組件Counter作為參數(shù),返回一個(gè)增強(qiáng)的Counter組件
//這個(gè)增強(qiáng)的組件props里有store的state和dispach方法
export default connect( mapStateToProps , mapDispatchToProps )(Counter)

//store.js

import { createStore } from "redux"

const defaultState={
    counter:0
}

//純函數(shù)
let reducers =(state = defaultState ,action)=>{
    switch (action.type){
        case "increment":
            console.log("increment")
            return {
                counter:state.counter+1
            }
        case "decrement":
            return {
                counter:state.counter-1
            }
        default :
        return state 
    }
}
const store = createStore(reducers)
export default store

如果文章能幫助到你若债,請給我點(diǎn)個(gè)贊吧!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末本今,一起剝皮案震驚了整個(gè)濱河市拆座,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冠息,老刑警劉巖挪凑,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逛艰,居然都是意外死亡躏碳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門散怖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菇绵,“玉大人,你說我怎么就攤上這事镇眷∫ё睿” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵欠动,是天一觀的道長永乌。 經(jīng)常有香客問我,道長具伍,這世上最難降的妖魔是什么翅雏? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮人芽,結(jié)果婚禮上望几,老公的妹妹穿的比我還像新娘。我一直安慰自己萤厅,他們只是感情好橄抹,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惕味,像睡著了一般害碾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赦拘,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天慌随,我揣著相機(jī)與錄音,去河邊找鬼。 笑死阁猜,一個(gè)胖子當(dāng)著我的面吹牛丸逸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播剃袍,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼黄刚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了民效?” 一聲冷哼從身側(cè)響起憔维,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎畏邢,沒想到半個(gè)月后业扒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舒萎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年程储,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臂寝。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡章鲤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咆贬,到底是詐尸還是另有隱情败徊,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布掏缎,位于F島的核電站皱蹦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏御毅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一怜珍、第九天 我趴在偏房一處隱蔽的房頂上張望端蛆。 院中可真熱鬧,春花似錦酥泛、人聲如沸今豆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呆躲。三九已至,卻和暖如春捶索,著一層夾襖步出監(jiān)牢的瞬間插掂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辅甥,地道東北人酝润。 一個(gè)月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像璃弄,于是被迫代替她去往敵國和親要销。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359