美文网首页
初探Redux

初探Redux

作者: Sommouns | 来源:发表于2020-03-21 22:42 被阅读0次

最近刚刚开始入坑React,妙不可言。其中比较复杂繁琐的就是这个Redux,之前Vuex用起来非常的简单。

说下核心的一个流程,Redux做的主要是一个状态的集中管理,React能控制的状态其实就state和prop,redux就属于后者。view层做一个操作,就会去触发一个Action。Action会给一个reducer传入一个新的对象,然后我们的核心其实就是reducer去改变我们的store。比较坑的就是这个action默认只能搞同步事件,异步的话,就要用到中间件,这个后序会来填坑的。

state -》action -》dispatch -》middleware -》reducer -》 store change -》 prop change -》refresh

基本流程用起来没有Vuex那样简单粗暴,但就我现在的理解来说,做的一个差不多的事情。


从源头store说起

redux的store其实就是个reducer,每次返回的都是新对象(这个问题后序填坑)

import * as Redux from 'redux'
import LIGHT from '../constants/key-mirror'
const initState = {
    color: 'red',
    isLoading: false
}


function light(state=initState, action) {
    switch(action.type) {
        case LIGHT.CHANGE_GREEN:
            return {
                color: 'green',
                isLoading: false
            }
        case LIGHT.CHANGE_YELLOW:
            return {
                color: 'yellow',
                isLoading: action.isLoading,
                text: action.text
            }
        case LIGHT.CHANGE_RED:
            return Object.assign({}, initState)
            
        default:
            return state
    }
}

const rootReducer = Redux.combineReducers({
    light
})

export default rootReducer

这边一个重点的函数Redux.combineReducers,后序填坑,第一次初探,主要以使用为主

有了Reducer了就该创建Store了

import rootReducer from '../reducers/index'
import * as Redux from 'redux'
import thunkMiddleware from 'redux-thunk'

export default function (initState) {
    return Redux.createStore(rootReducer, initState, Redux.applyMiddleware(thunkMiddleware))
}

这个thunkMiddleware中间件就是用来解决异步问题的,后序会对齐源码进行剖析。


有了store了,就可以使用了

import App from './container/index.js'
import ReactDOM from 'react-dom'
import React from 'react'
import {Provider} from 'react-redux'
import configureStore from './store/configure-store'
import './assets/index.css'
const store = configureStore()

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

到现在为止,其实store中的数据其实已经可以map到组件的props上了


使用action对我们的store进行赋能

import lights from '../constants/key-mirror'

export function changeyellow() {
    return (dispatch, getState) => {
        setTimeout(() => {
            dispatch({type: lights.CHANGE_YELLOW, isloading: false})
        }, 1000);
    }
}



export function changegreen() {
    return (dispatch, getState) => {
        setTimeout(() => {
            dispatch({type: lights.CHANGE_GREEN, isloading: false})
        }, 1000);
    }
}


export function changered() {
    return (dispatch, getState) => {
        setTimeout(() => {
            dispatch({type: lights.CHANGE_RED, isloading: false})
        }, 1000);
    }
}

万事俱备,统统连起来

function mapStateToProps (state) {
    return {
        data: state
    }
}

function mapDispatchToProps (dispatch) {
    return {
        actions: Redux.bindActionCreators(LightActions, dispatch)
    }
}

ReactRedux.connect(mapStateToProps, mapDispatchToProps)(App)

其实就是个高阶组件,把props传过去了而已。当点击事件触发:

handleClick(e) {
      let _cname = e.target.className
      if(_cname === 'red') {
          _cname = 'green'
      } else {
          _cname = 'yellow'
      }    
      const {actions} = this.props 
      actions['change' + _cname]()
}

后续会对其的复杂应用和实现原理,源代码层面进行研究学习,同时分享出来我的经验。

相关文章

  • Redux初探

    通过一个官方例子Counter来入门redux 前置知识参考:Redux入门 注意:大致看完参考资料后,clone...

  • Redux初探

    在这张图中,我们可以很清晰的看到,view中产生action,通过store.dispatch(action)将a...

  • 初探Redux

    最近刚刚开始入坑React,妙不可言。其中比较复杂繁琐的就是这个Redux,之前Vuex用起来非常的简单。 说下核...

  • Redux初探

    1.安装 redux是独立的数据状态管理插件,要想和react搭配使用,还需要添加react-redux用来将二者...

  • Redux 源码初探

    标签: 源码解析,前端 Redux 1. Reducer combineReducers将多个reducer 合并...

  • 初探react-redux

    什么是Redux Redux 是 JavaScript 状态容器,它提供对状态的统一管理 Redux 除了和 Re...

  • redux-saga初探

    犹豫dva的版本是2.4.1,对应的是redux-saga@0.16.2,所以就解读该版本的代码

  • React 初探(五)- Redux、React-Redux

    概述 之前写了一些 Redux 的一些示例,这次主要是跟着 Redux 官方网站 中的示例继续探索 Redux C...

  • 初探React+Webpack+Redux

    配置webpack:引用书籍《React Speed Coding》,详细介绍了web pack的搭建过程。 Re...

  • 六、使用redux管理数据

    一、安装redux 、redux-pack、redux-thunk npm i redux redux-pack ...

网友评论

      本文标题:初探Redux

      本文链接:https://www.haomeiwen.com/subject/yplpyhtx.html