redux

强大的状态管理器Redex

2021-10-11  本文已影响0人  又菜又爱分享的小肖

Redux是什么?

三大原则

image.png
单一数据源
State是只读的
使用纯函数来执行修改

Redux成员及数据流

Redux数据流的走向
image.png
Redux中最核心的API -- createStore

Store与Reducers建立联系

import { createStore } from 'redux';
const store = createStore(reducers);

通过 createStore方法创建的是一个对象, 他本身包含4个方法.

// 导入createStore
import { createStore } from 'redux';

const firstReducer = (state = 0, action) => {
    switch (action.type) {
        case 'add':
            return state + 1;
        case 'reducer':
            return state - 1;
        default:
            return state;
    }
}
 // 建立联系
const store = createStore(firstReducer);

export default store;

使用dispatch & getState

import React, { Component } from 'react';
import store from './store'
class FirstReducer extends Component {
    add = () => {
        store.dispatch({ type: 'add' })
    }
    reducer = () => {
        store.dispatch({ type: 'reducer' })
    }
    render() {
        return (
            <div>
                总数:{store.getState()}
                <button onClick={this.add}>加1</button>
                <button onClick={this.reducer}>减1</button>
            </div>
        );
    }
}

export default FirstReducer;

react-redux

通过props的方法来传输数据

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

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

const mapDispatchToProps = (dispatch) => {
  return {
    add: () => {
      dispatch({type: 'add'})
    },
    reducer: () => {
      dispatch({type: 'reducer'})
    }
  }
}
class App extends Component {
  render() {
    return (
      <div>
        App
        {this.props.count}
        <button onClick={() => this.props.add()}>加1</button>
        <button onClick={() => this.props.reducer()}>减1</button>
      </div>
    )
  }
}

export default connect(mapStateToProps, mapDispatchToProps)(App);
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import store from './redux/store';
import { Provider } from 'react-redux';
ReactDOM.render(
  <Provider store={store}>
      <App/>
 </Provider> , document.querySelector('#root'));
redux中间件
image.png
npm i redux-thunk --save
npm i redux-logger --save
import { createStore,applyMiddleware } from 'redux'
import logger from 'redux-logger'
import thunk from 'redux-thunk'
const fitstReducer = (state=0,action ) => {
 console.log(action)
 switch(action.type){
 //当传⼊action的type为add的时候给state+1
 case 'add' :
 return state+1;
 //当传⼊action的type为reduce的时候给state-1
 case 'reduce' :
 return state-1;
 //当传⼊的都不是以上的类型是返回旧的state
 default:
 return state;
 }
}
//创建数据仓库,把我们编写的reducer作为参数传⼊createStore
//有⼀个注意点就是logger最好放在最后,⽇志最后输出才不会出
//bug,因为中间件时按顺序执⾏
const store=createStore(fitstReducer,applyMiddleware(thunk,logger))
export default store
上一篇 下一篇

猜你喜欢

热点阅读