Wepy之Redux

首先接手的项目因为全局变量很多 所以用this.$parents.globalData.变量的方法会比较混乱(当然 你也可以全都用全局变量)
状态管理前期的配置会相对繁琐.. 并且没有全局变量开阔.. 你可能为了一个变量需要写更多的代码 但是对于日后的程序管理 还是很方便的

目前看了下项目的代码 基本都是用来存储变量 应该还会有高阶语法 这里不展开了 ..因为我也不会...这里是对教程的总结 便于自己理解

store---types

types里存储的是触发action的函数名 记住 types的都是函数名 不处理任何逻辑 命名规则是全大写

//location.js
export const CHANGE = 'CHANGE'
export const CHANGECITY = 'CHANGECITY'

↑↑↑这样就定义好了一个函数名 通过types里的index.js 入口文件 导出

//types下的index.js
export * from './location'

store---reducers

//入口文件 把reducers下的所有函数引入 并且通过combineReducers函数导出
import { combineReducers } from 'redux'
import location from './location'

export default combineReducers({
  location
})

接下来让我们看看location.js里是什么样的

import { handleActions } from 'redux-actions'
//这里把types里的函数名引入 注意相对路径
import { CHANGE, CHANGECITY } from '../types/location'
//通过handleActions函数导出
//这里函数接收2个函数 第一个函数为触发方法修改状态,第二个函数为状态里的默认值
export default handleActions({
  [CHANGE](state, action) {
    return {
      ...state,
      postLocation: action.payload.postLocation
    }
  },
  [CHANGECITY](state, action) {
    return {
      ...state,
      cityName: action.payload.cityName
    }
  }
}, {
  postLocation: '',
  cityName: ''
})


//当然也可以按照教程里这样写 应该可读性更高
import { handleActions } from 'redux-actions'
import { CHANGE, CHANGECITY } from '../types/location'
const defaultState = {
  postLocation: '',
  cityName: ''
}
export default handleActions({
  [CHANGE](state, action) {
    return {
      ...state,
      postLocation: action.payload.postLocation
    }
  },
  [CHANGECITY](state, action) {
    return {
      ...state,
      cityName: action.payload.cityName
    }
  }
}, defaultState)

其余的就不展开说了 自己也没搞
之后让我们看看在page里该如何使用把

  import wepy from 'wepy'
  import { connect } from 'wepy-redux' //引入redux
//这里我是把connct当作连接状态管理的中间件
  @connect({
    postLocation(state) {
      return state.location.postLocation
    }
  })
//之后就可以当作自己的变量用this.postLocation来取到值了

这是获取状态的值 那发起action修改值呢 connect接收2个对象 在第二个对象提取reducers

//之前的引入不变 这里只关注@connect如何使用
//首先需要引入types里的方法名
import {CHANGE, CHANGECITY } from '../store/types/location'
//在第二个对象里引入方法名 (key value 一样可以简写)
 @connect({}, {
    CHANGE,
    CHANGECITY 
  })

//自己本身的方法是通过this.CHANGE()调用
//这里有点不同 通过?
this.methods.CHANGE({
  postLocation:你要存储的值
})

至此 状态管理的全局变量就到此结束
之后研究一下另外一个例子在补充


Wepy之Redux_第1张图片

中场休息结束啦

继续看看状态的其他用法

//reducers下的list.js
    import { handleActions } from 'redux-actions'
    import { ADD , REMOVE } from '../types/list'
    //这里定义了一个数组 我们也可以把他看成一个循环的列表 key-value自定义
    const defaultState = [
        {
            title : '吃饭' ,
            text : '今天我要吃火锅'
        },
        {
            title : '工作' ,
            text : '今天我要学习Redux'
        }
    ]
    //这里的state 应该指的是上面这个对象
    export default handleActions({
        //添加一条的方法
        [ADD]( state , action ){
            state.push(action.payload)
            return [...state]
        },
        //删除一条的方法
        [REMOVE]( state , action ){
            state.splice( action.payload , 1 );
            return [ ...state ]
    
        }
    },defaultState)


我们看看page里如何使用这两个方法

//某个不知名的page
    
    
    
                    
                    

你可能感兴趣的:(小程序)