@subject:wepy-redux-time-todo@author:leinov@date:2018-10-30wepy-redux-time-todo使用github地址gitclonegit@github。com:leinov/wepy-redux-time-todo.gitnpminstallnpmrundev可以添加到微信开发者工具中运行wiki创建项目wepy是腾讯开发的一个小程序框架,基于vue写法,也可以灵活使用三方库也对原生API进行了部分优化,提高了整体代码的可读性和可维护性,大大提高了开发效率。强烈推荐使用。首先需要安装wepy命令,并通过命令创建一个wepy项目。下面命令第二句执行过程中会出现一些问题。当询问是否使用redux时选择y,创建时会添加redux依赖和store文件夹npminstallwepy-cli-g//安装全局wepy命令wepyinitstandardwepy-redux-time-todo//创建wepy-redux-time-todo项目的项目结构执行创建命令后,会出现类似如下结构的项目结构(以下是我自己创建文件后)|--dist//编译执行文件夹|--node_modules|--src//开发文件夹||--components//Component|--sec-title.wpy|--pages//业务页面|--index.wpy|--store//redux|--actions|--index.js|--reducers|--timeReducer.js|--index.js//mergereducers|--types|--index.js|--style//style|--weui.scss|--app.wpy//entry|--package.jsonRedux概念和使用Redux的主要功能是管理复杂的数据,多用途专注于在单页应用中操作复杂的状态,将整个应用的状态集中在一个容器中统一管理.作为状态容器,它就像一个盒子(store)。在这个唯一的盒子里有很多状态(state)(整个应用只有一个store),所有状态都以对象树的形式存储在store中。改变状态的唯一方法是触发一个动作,这是一个描述你想做什么的简单对象。reducer是一个纯函数,它根据action返回的类型操作状态变化返回一个新的状态。reducer返回最新的存储作为createStore的参数。下面我们通过redux官网的代码详细描述redux的执行过程。Actionaction可以理解为一个动作,用户想要做什么,比如点击按钮让页面的数字加1,切换日期,插入数组等,简单来说就是一个行为标识,表示希望改变页面的状态。Action用一个对象来表示,它包含一个必需的属性type{type:"INCREMENT"}//表示加动作{type:"DECREMENT"}//表示减动作{type:"GET_DATA",payload:{}}//表示获取数据动作,在payload属性上挂载一个数据,供reducer使用。多用于异步获取数据,也可以自己添加其他属性。Reducerreducer是一个纯函数,形式为(state,action)=>state(纯函数概念:不依赖外部环境变量,只依赖内部参数,无副作用,相同输入保证相同输出)。描述动作如何将状态转换为下一个状态。状态的形式由你决定,它可以是原始类型、数组、对象,甚至是Immutable.js生成的数据结构。唯一的一点是,当状态改变时,需要返回一个全新的对象,而不是修改传递的参数。下面的例子使用switch语句和字符串进行判断,也可以使用自己的方法。functionreducer(state=0,action){switch(action.type){case'INCREMENT':returnstate+1;case'DECREMENT':返回状态-1;默认值:返回状态;}}storedux的createStore方法用于为应用创建唯一的store。createStore方法的参数是reducer,用于更新store中的statetree。{state:0}的初始状态可以通过创建以下import{createStore}from'redux'存储在商店中;conststore=createStore(reducer);store有几个重要的方法store.dispatch(action)//派发事件指示要做什么store.getState()//获取存储在store中的所有状态(数据)Store.subscribe(listener)//手动监听状态变化dispatchchangesstatestore.dispatch是改变状态的唯一途径,dispatch接受一个action参数(做什么),通知reducer需要做哪些改变,然后更新整个storestore.dispatch({INCREMENT:"INCREMENT"})这个操作会告诉reducer需要state加1才能得到statestore.getState()//{state:1}subscribe监听store.subscribe(()=>console.log(store.getState()));dispatch触发状态更新后,需要通过subscribe进行监听,获取最新状态。如果在react中使用,视图渲染功能需要放在监控功能中。从“./redux.js”导入商店store.subscribe(()=>{ReactDOM.render(
