小程序构建工具wepy与redux的碰撞
wepy是官方推荐的微信小程序组件化开发框架,使用该框架可以类似开发vue项目的方式开发小程序,框架提供实时编译打包生成小程序原生代码的服务。
安装
1npm install wepy-cli -g初始化项目
1wepy init standard myproject切换至项目目录/安装依赖
123cd myprojectnpm install开启实时编译
12345wepy build --watch// 注意:此命令开启实时编译,但属于开发模式,存在代码冗余。如果需要上线生产环境,请执行打包命令:npm run build
wepy项目结构
此处只列举了src目录下的文件结构
|
|
在初始化项目的时候,我选择了使用redux
,因此项目中会自动添加wepy-redux
插件,并初始化一个基础的范例。wepy-redux
的结构一会儿在后面会详细再介绍。
app.wpy
|
|
wepy-redux
|
|
入口文件
index.js
12345678import { createStore, applyMiddleware } from 'redux'import promiseMiddleware from 'redux-promise' //promiseMiddleware中间件,用于action做异步处理import rootReducer from './reducers'export default function configStore () {const store = createStore(rootReducer, applyMiddleware(promiseMiddleware))return store}types
types
文件夹下存放文件用于定义action
名称12345678910// index.jsexport * from './counter'// counter.jsexport const INCREMENT = 'INCREMENT'export const DECREMENT = 'DECREMENT'export const ASYNC_INCREMENT = 'ASYNC_INCREMENT'reducers
reducers
文件夹下存放纯函数,用来更改我们的状态。123456789101112131415161718192021222324252627282930313233343536// index.jsimport { combineReducers } from 'redux'import counter from './counter'export default combineReducers({counter})// counter.jsimport { handleActions } from 'redux-actions'import { INCREMENT, DECREMENT, ASYNC_INCREMENT } from '../types/counter'const defaultState = {num: 0,asyncNum: 0}export default handleActions({[INCREMENT] (state) {return {...state,num: state.num + 1}},[DECREMENT] (state) {return {...state,num: state.num - 1}},[ASYNC_INCREMENT] (state, action) {return {...state,asyncNum: state.asyncNum + action.payload//此处多了个action,若在actions文件下无定义处理,则传递调用时携带的参数}}}, defaultState)actions
补充实现
reducers
下的数据异步操作1234567891011121314151617// index.jsexport * from './counter'// counter.jsimport { ASYNC_INCREMENT } from '../types/counter'import { createAction } from 'redux-actions'export const asyncInc = createAction(ASYNC_INCREMENT, (val) => {return new Promise(resolve => {setTimeout(() => {resolve(1+val)}, 1000)})})/***当组件调用'asyncInc'方法时,会触发调用'ASYNC_INCREMENT',其中携带的参数即异步函数return的值*/
组件里如何调用wepy-redux
这里主要涉及到 connect
的用法: connect(states, actions)
,这里解释下:
states
: 访问 state 上的值,可以是数组或者对象,如果是对象的话,则包含的是K-V
对,V
可以是函数还可以是字符串,如果是字符串的话则默认获取state[V]
, 否则的话则是使用返回值;而对于如果是数组的话(数组中的项只能为字符串),则认为是相同的K-V
对象结构。states
最终会附加到组件的computed
属性值上。actions
: 只能传入对象,对象的K-V
结构,如果V
是字符串的话,则直接会distatch
如下的结构:1234567// args 就是调用传入参数{type: val,// 修正一般情况下的参数 一般支持只传一个参数// 如果真的是多个参数的话 那么 payload 就是参数组成的数组payload: args.length > 1 ? args : args[0]}
示例:
|
|