Redux

抽離出來

(demo)[https://jsbin.com/noxopeg/edit?html,js,output]

Redux.createStore(fn)
fn(pre的狀態(tài),要進行的操作){
return current狀態(tài)
}

都是發(fā)布訂閱模式 套層殼

react-redux

index.js依賴

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import * as serviceWorker from './serviceWorker';
import {createStore} from 'redux'
import { Provider } from "react-redux";

狀態(tài)變更邏輯

const reducer = (state, action)=>{
    if(state === undefined){
        return {n: 0}
    }else{
        if(action.type === 'add'){
            return {n: state.n + action.payload}
        }else{
            return state
        }
    }
}

生成store

const store = createStore(reducer)

把store放在render里(得到第一次的界面)(當(dāng)狀態(tài)改變將再次執(zhí)行render)

ReactDOM.render(
    <Provider store={store}>
        <App />
    </Provider>,
    document.getElementById('root')
)

Provider 會將store 傳遞給被它包裹的所有組件

App依賴

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

當(dāng)觸發(fā)onClick(點擊了)

class App extends Component {
    render() {
        return (
            <div>
                你點擊了 <span id="value">{this.props.n}</span> 次
                <div>
                    <button id="add" onClick={ this.props.add.bind(this)}>+1</button>
                 </div>
            </div>
        );
    }
}

這里定義的值可以被子代組件獲取

function mapStateToProps(state){
    return {
        n: state.n
    }
}

這里定義改變的action (定義事件及改變的值)

function mapDispatchToProps(dispatch) {
    return {
        add1: ()=> dispatch({type:'add', payload: 1})
    }
}
    
如果用對象的形式不需要dispetch  
  mapDispatchToProps:{
     add1:()=>{
      return {type:'add', payload: 1}
    }
  }

將props 傳給App

export default connect(mapStateToProps,mapDispatchToProps)(App);

把mapStateToProps和mapDispatchToProps合并作為props傳遞給App

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容