我的编程空间,编程开发者的网络收藏夹
学习永远不晚

在小程序里如何使用Redux

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

在小程序里如何使用Redux

这篇文章主要介绍在小程序里如何使用Redux,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

在小程序里使用 Redux 进行状态管理, Redux 是一个前端状态管理的容器,对于构建大型应用,对里面共享数据、状态的管理非常方便,学过 React 的同学对它应该不陌生,如果还不了解的同学,不如进服瞧一瞧;

wepy 框架本身是支持 Redux 的,我们在构建项目的时候,将 是否安装 Redux 选择 y 就好了,会自动安装依赖,运行项目后看官方给的 demo 确实是可以做到的,但是官方文档里却对这一块只字不提,经过我自己尝试了一波,这才稍微摸清了它的使用方式,赶紧拿来与你们分享~

具体实现

运行我们的项目,发现官网已经给了我们一些 Redux 的使用方法,实际上主要是放在 store文件夹下面了,我们现在来一探究竟~

step1

入口文件 index.js ,里面主要是 初始化 Redux , 其中 promiseMiddleware 是一个中间件,方便后面 action 做异步处理~ reducers 是一个纯函数,用于接受 Action 和当前 State作为参数,返回一个新的 State ~

import { createStore , applyMiddleware } from 'redux'import promiseMiddleware from 'redux-promise'import reducer from './reducers'const Store = createStore(reducer ,applyMiddleware(promiseMiddleware))export default configStore => Store
step2

剩下三个文件夹分别是 types reducers 和 actions ,其中 types 用于定义我们要触发的 action 的名称,也就是表示 action 的名称,这里我定义了 counter 和 list 两个 types ,内容分别如下:

counter.js

export const INCREMENT = 'INCREMENT'export const DECREMENT = 'DECREMENT'export const ASYNC_INCREMENT = 'ASYNC_INCREMENT'

list.js

export const ADD = 'ADD'export const REMOVE = 'REMOVE'

最后通过 types 文件夹的入口文件 index.js 将他们暴露出去~

export * from './counter'export * from './list'
step3

reducers 文件件存放我们的纯函数,用来更改我们的状态 , 他也有一个入口文件 index.js,定义如下:

import { combineReducers } from 'redux'    import counter from './counter'    import list from './list'        export default combineReducers({    counter ,    list    })

首先将 counter 和 list 的分别引入进来,通过 redux 定义的 combineReducers 函数,将所有的 reducers 合并成一个整体,方便我们后面对其进行管理!

那么 counter 和 list 对应的 reducer 分别是 什么样的?我们直接看代码:

counter.js

import { 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    }    }    },defaultState)

我们介绍一下 counter.js 里面的 reducer , 首先引入了 handleActions 方法用来创建 actions , 它将多个相关的 reducer 写在一起也是 ,方面后期维护,也方便后期通过 dispatch来调用他们更改 state 里面的状态,它主要接收两个参数,第一个参数时候个大对象,里面存放多个 reducer , 第二个参数是初始化的时候 state 的状态值,因此,我们一开始就定义了 defaultState ;

接着,我们看看里面的 reducer , 分别定义了 INCREMENT 、 DECREMENT 和 ASYNC_INCREMENT 三个 reducer ,前两个比较简单,分别是对 state 里面的 num 值进行 加减操作 , 最后一个是通过 action.payload 的值来对 asyncNum 的值进行异步操作的,具体怎么做到的,我们一会再看~

list.js 里定义的 reducer 跟上面类似,我就不一一介绍了,直接贴代码即可~

list.js

import { handleActions } from 'redux-actions'    import { ADD , REMOVE } from '../types/list'        const defaultState = [    {    title : '吃饭' ,    text : '今天我要吃火锅'    },    {    title : '工作' ,    text : '今天我要学习Redux'    }    ]        export default handleActions({    [ADD]( state , action ){    state.push(action.payload)    return [...state]    },    [REMOVE]( state , action ){    state.splice( action.payload , 1 );    return [ ...state ]        }    },defaultState)
step4

我们终于走到这一步了,到这里,你已经离预期不远啦,就剩一个 actions 文件件了,毫不例外,入口文件 index.js 如下:

index.js

export * from './counter'

很简单,只需要将所需的 action 导出即可~

这个里面我只定义了 counter 的 action , 也就是为了刚才异步数据 asyncNum 准备的~

counter.js

import { ASYNC_INCREMENT } from '../types/counter'    import { createAction } from 'redux-actions'        export const asyncInc = createAction(ASYNC_INCREMENT,()=>{    return new Promise(resolve=>{    setTimeout(()=>{    resolve(1)    },1000)    })    })

这里跟 reducer 里面的要区分,这里是可以对数据进行一系列处理的,我们通过 createAction 创建一个 action , 该方法主要有两个参数,第一个参数 type 表示 action 的类型,第二个参数 payloadCreator 是一个 function ,处理并返回需要的 payload ;如果空缺,会使用默认方法。这里我们是延迟 1s 后返回一个 1 ;

ok,到此为止,你已经基本完成了一个 redux 的容器~

 

接下来,就是展示它怎么使用的时候了~

step5

我们创建一个 index.wpy 的文件,这里我把代码直接贴出来,然后慢慢来分析看看~

代码如下:

<template lang="wxml">  <view class="container"><text>同步{{ num }}</text><text>异步{{ asyncNum }}</text><button @tap="increment" type="primary">加一</button><button @tap="decrement" type="primary">减一</button><button @tap="asyncIncrement" type="primary">异步加一</button>        <button @tap="addList">添加</button>        <view class="box"><view class="item" wx:for-items="{{ todoList }}" wx:key="index"><view class="title">{{ item.title }}</view><view class="content">{{ item.text }}</view><button type="primary" class="delete" @tap="delete({{index}})">删除</button></view></view>      </view>    </template>    <script>import wepy from 'wepy'    import { connect } from 'wepy-redux'    import { INCREMENT , DECREMENT } from '../store/types/counter'    import { asyncInc } from '../store/actions'        @connect({    num(state){    return state.counter.num;    },    asyncNum(state){    return state.counter.asyncNum;    }    },{    increment : INCREMENT ,    decrement : DECREMENT ,    asyncIncrement : asyncInc    })        export default class Index extends wepy.page {        components = {}        computed = {    todoList(){    return wepy.$store.getState().list;    }        }            methods = {    delete(index){    wepy.$store.dispatch({ type : 'REMOVE' , payload : index })                },    addList(){    wepy.$store.dispatch({ type : 'ADD' , payload : {    title : '学习' ,                    text : '好好学习'                }})            }        }        onLoad () {    console.log(wepy.$store.getState())    }}    </script>        <style lang="less">text{            display: block;            text-align: center;            margin: 10px auto;        }        button{            width: 90%;            display: block;            margin: 10px auto;        }            .item{            display: flex;            align-items: center;            text-align: center;            padding: 0 15px;            .title{                font-size: 14px;                line-height: 20px;                margin: 10px auto;            }            .content{                font-size: 15px;                flex: 1;            }                .delete{                width: 70px;                height: 40px;                line-height: 40px;            }        }    </style>

点一点看,发现卧槽,很牛逼,有木有~

ok~ 我们一起看看上面的代码是怎么做的~

样式结构方面我们这里不做讨论,主要看 js 部分,其中 import { INCREMENT , DECREMENT } from '../store/types/counter' 和 import { asyncInc } from '../store/actions'分别表示从 counter 和 actions 导出所需的 action

我们重点看看 从 wepy-redux 中 引入的 connect ,这个 connect 很关键,它是连接 组件 和 状态 的桥梁,主要用法是 @connect(states, actions) ~

  • states : 访问 state 上的值,可以是数组或者对象,如果是对象的话,则包含的是 K-V对, V 可以是函数还可以是字符串,如果是字符串的话则默认获取 state[V] , 否则的话则是使用返回值;而对于如果是数组的话(数组中的项只能为字符串),则认为是相同的 K-V 对象结构。 states 最终会附加到组件的 computed 属性值上。

以上是“在小程序里如何使用Redux”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

在小程序里如何使用Redux

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

在小程序里如何使用Redux

这篇文章主要介绍在小程序里如何使用Redux,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在小程序里使用 Redux 进行状态管理, Redux 是一个前端状态管理的容器,对于构建大型应用,对里面共享数据、状态的管理
2023-06-26

如何在React中直接使用Redux

这篇文章主要介绍了如何在React中直接使用Redux,目前redux在react中使用是最多的,所以我们需要将之前编写的redux代码,融入到react当中去,本文给大家详细讲解,需要的朋友可以参考下
2022-11-13

如何在微信小程序中使用echart

如何在微信小程序中使用echart?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先到ECharts官网下载我放的是tool文件夹下面,你们随意引入的时候注意路径就行2.使
2023-06-15

echart在微信小程序中如何使用

今天小编给大家分享一下echart在微信小程序中如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。echarts不显示在
2023-07-05

如何在小程序里显示群名称

这篇文章主要介绍“如何在小程序里显示群名称”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何在小程序里显示群名称”文章能帮助大家解决问题。获取群 ID显示群名的前提是,已经获取到了该群的群 ID。要
2023-06-26

小程序中如何使用wx.createBLEConnection

本文将为大家详细介绍“小程序中如何使用wx.createBLEConnection”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“小程序中如何使用wx.createBLEConnection”能够给你意想不到的
2023-06-26

小程序中如何使用wx.getRecorderManager

这篇文章主要为大家展示了小程序中如何使用wx.getRecorderManager,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“小程序中如何使用wx.getRecorderManager”这篇文章
2023-06-26

小程序中如何使用wx.writeBLECharacteristicValue

这篇“小程序中如何使用wx.writeBLECharacteristicValue”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“小程序中如何使用wx.writeBLECharacteristicValue”,给大家总结了以下
2023-06-26

video组件如何在微信小程序中使用

video组件如何在微信小程序中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.app.json{ "pages":[ "pages/video/video"
2023-06-14

如何在微信小程序中使用Echarts方法

如何在微信小程序中使用Echarts方法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。xxx.json{ "usingComponents": { "ec-canvas":
2023-06-08

如何在小程序中引入使用vant框架

一、vant框架 vantUI框架常用于移动端页面组件的基础库构建,为了让用户获得更趋向于原生的体验,它是一种相当不错的方案选择。 关于这个框架,它不仅有适用于移动端vue脚手架的版本,同时还存在可以兼容小程序开发的webapp版本。在微信
2023-08-17

小程序tip集合如何使用

这篇文章主要介绍“小程序tip集合如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“小程序tip集合如何使用”文章能帮助大家解决问题。小程序组件中tip的集合:1.view(视图容器。)1.ti
2023-06-26

微信小程序TodoList如何使用

这篇文章主要介绍“微信小程序TodoList如何使用”,在日常操作中,相信很多人在微信小程序TodoList如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序TodoList如何使用”的疑惑有所
2023-06-26

小程序的showToast功能如何使用

这篇文章主要介绍“小程序的showToast功能如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“小程序的showToast功能如何使用”文章能帮助大家解决问题。WeToast for 微信小程
2023-06-26

小程序的video控件如何使用

这篇文章主要介绍“小程序的video控件如何使用”,在日常操作中,相信很多人在小程序的video控件如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”小程序的video控件如何使用”的疑惑有所帮助!接下来
2023-06-26

微信小程序中如何使用wx.previewImage

这篇文章主要为大家展示了微信小程序中如何使用wx.previewImage,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“微信小程序中如何使用wx.previewImage”这篇文章吧。预览图片。O
2023-06-26

如何才能使用微信小程序

这篇“如何才能使用微信小程序”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何才能使用微信小程序”文章吧。  第一步:填写账
2023-06-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录