React-redux概念學(xué)習(xí)

react-redux.png

React-redux 概述

react-redux 能夠使你的React組件從React store中很方便的讀取數(shù)據(jù)薇搁,并且向store中分發(fā)actions以此來更新數(shù)據(jù)

React-redux中重要的兩個成員

  1. Provider:這個組件能夠使你整個app都能獲取到store中的數(shù)據(jù)
    渣磷。provider 包裹在根組件的最外層蒿秦,使所有的子組件都可以拿到 state
    。provider 接收 store 作為 props漠酿,然后通過 context 往下傳遞拯钻,這樣react中任何組件都可以通過 context 獲取到 store
  2. connect:這個方法能夠使組件跟store來進行關(guān)聯(lián)
    。provider 內(nèi)部組件如果想要使用到 state 中的數(shù)據(jù)幔亥,就必須要 connect 進行一層包裹封裝,換一句話來說就是必須要被 connect 進行加強
    玖像。connect 就是方便我們組件能夠獲取到 store 中的 state

React-redux的基本使用

安裝相關(guān)依賴

npm install redux react-redux

構(gòu)建 store 和 reducer

  1. 創(chuàng)建 reducer/index.js 文件紫谷,構(gòu)建reducer來響應(yīng) actions
const initState = {
    status: false
}

exports.loverReducer = (state = initState, action) => {
    switch (action.type) {
        case 'send_love':
            return {
                status: true
            }
        case 'stop_love':
            return {
                status: false
            }
        default:
            return state;
    }
}
  1. 創(chuàng)建 store/index.js 文件齐饮,通過 createStore 方法捐寥,把我們的 reducer 傳入進來
import {createStore} from 'redux'
import {loverReducer} from '../reducer/index'

export default createStore(loverReducer)

  1. 在 app.js 中引入 store
// 導(dǎo)入store
import store from './store';
import { Provider } from 'react-redux'

class App extends React.Component {
    render() {
        return (
            <Provider store={store}>
                <div>
                    Hello world!
                </div>
            </Provider>

        );
    }
}
ReactDOM.render(<App />, document.getElementById('root'));

搭建頁面結(jié)構(gòu)

  1. 創(chuàng)建一個組件,名字叫 ComA祖驱,里面放一個 button 按鈕
import React from 'react';
import { connect } from 'react-redux'

class Boy extends React.Component {
    constructor(props){
        super(props)
        this.handleClick = this.handleClick.bind(this);
    }
    handleClick(){
        let status = this.props.status;
        status?this.props.stopLove():this.props.sendLove();
    }
    render() {
        let status = this.props.status;
        return (
            <button onClick={this.handleClick}>{status?'停止':'點擊'}發(fā)射</button>
        )
    }
}

const mapStateToProps = (state)=>{
    return state
}

const mapDispatchToProps = (dispatch) => {
    return {
        sendLove: () => {
            dispatch({
                type: 'send_love'
            })
        },
        stopLove: () => {
            dispatch({
                type: 'stop_love'
            })
        }
    }
}
export default connect(mapStateToProps, mapDispatchToProps)(Boy)
  1. 創(chuàng)建另一個組件握恳,名字叫 ComB,里面放一個 img捺僻,用來顯示圖片
import React from 'react';
import {connect} from 'react-redux';
import default_img from '../../../assets/images/send_love.jpg' 
import dynamic_img from '../../../assets/images/send_love.gif' 

class Girl extends React.Component {
    render(){
        let status = this.props.status
        return(
            <img src={status?dynamic_img:default_img} alt="" />
        )
    }
}

const mapStateToProps = (state)=>{
    return state
}

export default connect(mapStateToProps)(Girl)
  1. 在 app.js 中引入兩個組件
import React from 'react'
import ReactDOM from 'react-dom';
import Boy from './pages/boy/index'
import Girl from './pages/girl/index'
// 導(dǎo)入store
import store from './store';
import { Provider } from 'react-redux'

class App extends React.Component {
    render() {
        return (
            <Provider store={store}><div>
                <Girl />
                <Boy />
            </div></Provider>

        );
    }
}
ReactDOM.render(<App />, document.getElementById('root'));
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乡洼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子匕坯,更是在濱河造成了極大的恐慌束昵,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葛峻,死亡現(xiàn)場離奇詭異锹雏,居然都是意外死亡,警方通過查閱死者的電腦和手機术奖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門礁遵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人采记,你說我怎么就攤上這事佣耐。” “怎么了唧龄?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵兼砖,是天一觀的道長。 經(jīng)常有香客問我,道長讽挟,這世上最難降的妖魔是什么然走? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮戏挡,結(jié)果婚禮上芍瑞,老公的妹妹穿的比我還像新娘。我一直安慰自己褐墅,他們只是感情好拆檬,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著妥凳,像睡著了一般竟贯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逝钥,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天屑那,我揣著相機與錄音,去河邊找鬼艘款。 笑死持际,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哗咆。 我是一名探鬼主播蜘欲,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼晌柬!你這毒婦竟也來了姥份?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤年碘,失蹤者是張志新(化名)和其女友劉穎澈歉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屿衅,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡埃难,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了傲诵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凯砍。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拴竹,靈堂內(nèi)的尸體忽然破棺而出悟衩,到底是詐尸還是另有隱情,我是刑警寧澤栓拜,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布座泳,位于F島的核電站惠昔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挑势。R本人自食惡果不足惜镇防,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潮饱。 院中可真熱鬧来氧,春花似錦、人聲如沸香拉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凫碌。三九已至扑毡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盛险,已是汗流浹背瞄摊。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苦掘,地道東北人换帜。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像鸟蜡,于是被迫代替她去往敵國和親膜赃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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