热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Taro集成Redux疾速上手

本文合適有肯定React和Redux基本的用戶瀏覽。媒介的媒介近來被一款來自京東凹凸實驗室的多終端開闢框架Taro吸粉了,官方對Taro的簡介是運用React語法,一鍵天生多終端運

本文合適有肯定React和Redux基本的用戶瀏覽。

媒介的媒介

近來被一款來自京東凹凸實驗室的多終端開闢框架Taro吸粉了,官方對 Taro 的簡介是運用React語法,一鍵天生多終端運用(包含小順序 / H5 / 快運用 / RN 等),而現在 Github 的 Star 也達到了異常可觀的數目:4k+。對此,筆者也嘗了把鮮,體驗了下怎樣運用Taro寫微信小順序。覺得照樣非常天真易用(一揮而就,都沒碰到bug!),而且 Taro 還集成了 Redux,處置懲罰了小順序沒有數據流框架的痛點。

這裏貼一個 Taro 的官方文檔,有興緻的偕行們能夠了解下~也能夠和我交換~嘿嘿

《Taro集成Redux疾速上手》

媒介

Redux是Javascript 狀況容器,供應可展望化的狀況治理。一般來說,範圍比較大的小順序,頁面狀況,數據緩存,須要治理的東西太多,這時候引入Redux能夠輕易的治理這些狀況,統一數據,一次要求,運用全局同享

而Taro也異常友愛地為開闢者供應了移植的Redux。

依靠

為了更輕易地運用Redux,Taro供應了與react-redux API 險些一致的包 @tarojs/redux 來讓開闢人員獲得越發優越的開闢體驗。

開闢前須要裝置redux@tarojs/redux以及一些須要用到的中間件

ps:如果在h5要運用redux的話,還須要引入
nerv-redux這個庫

$ yarn add redux @tarojs/redux redux-action redux-logger
# 或許運用 npm
$ npm install --save redux @tarojs/redux redux-action redux-logger

示例

下面經由過程完成一個Todolist疾速上手Redux。

1. 目次構造

起首經由過程目次分別我們的store/reducers/actions

《Taro集成Redux疾速上手》

分別在文件夾里建立index.js,作為三個模塊的主文件。reducersactions內里的內容我們須要計劃好功用以後再來處置懲罰。

// store/index.js
import { createStore, applyMiddleware } from 'redux'
// 引入須要的中間件
import thunkMiddleware from 'redux-thunk'
import { createLogger } from 'redux-logger'
// 引入根reducers
import rootReducer from '../reducers'
const middlewares = [
thunkMiddleware,
createLogger()
]
// 建立store
export default function configStore () {
const store = createStore(rootReducer, applyMiddleware(...middlewares))
return store
}

2. 編寫Todos

起首在app.js中引入一最先定義好的store,運用@tarojs/redux中供應的Provider組件將前面寫好的store接入運用中,這樣一來,被Provider包裹的頁面都能同享到運用的store

import Taro, { Component } from '@tarojs/taro'
import { Provider } from '@tarojs/redux'
import configStore from './store'
import Index from './pages/index'
import './app.scss'
const store = configStore()
class App extends Component {
...
render () {
return (



)
}
}

接下來就能夠正式最先計劃Todos運用的主要功用了。

起首我們能夠新建constants文件夾來定義一系列所需的action type常量。比方Todos我們能夠先新增ADDDELETE兩個action type來辨別新增和刪除Todo指令。

// src/constants/todos.js
export const ADD = 'ADD'
export const DELETE = 'DELETE'

然後最先建立處置懲罰這兩個指令的reducer

// src/reducers/index.js
import { combineReducers } from 'redux'
import { ADD, DELETE } from '../constants/todos'
// 定義初始狀況
const INITIAL_STATE = {
todos: [
{id: 0, text: '第一條todo'}
]
}
function todos (state = INITIAL_STATE, action) {
// 獵取當前todos條數,用以id自增
let todOnum= state.todos.length
switch (action.type) {
// 依據指令處置懲罰todos
case ADD:
return {
...state,
todos: state.todos.concat({
id: todoNum,
text: action.data
})
}
case DELETE:
let newTodos = state.todos.filter(item => {
return item.id !== action.id
})
return {
...state,
todos: newTodos
}
default:
return state
}
}
export default combineReducers({
todos
})

接着在action中定義函數對應的指令。

// src/actions/index.js
import { ADD, DELETE } from '../constants/todos'
export const add = (data) => {
return {
data,
type: ADD
}
}
export const del = (id) => {
return {
id,
type: DELETE
}
}

完成上述三步以後,我們就能夠在Todos運用的主頁運用響應action修正並獲得新的store數據了。來看一眼Todos的index.js

// src/pages/index/index.js
import Taro, { Component } from '@tarojs/taro'
import { View, Input, Text } from '@tarojs/components'
import { connect } from '@tarojs/redux'
import './index.scss'
import { add, del } from '../../actions/index'
class Index extends Component {
cOnfig= {
navigationBarTitleText: '首頁'
}
constructor () {
super ()
this.state = {
newTodo: ''
}
}
saveNewTodo (e) {
let { newTodo } = this.state
if (!e.detail.value || e.detail.value === newTodo) return
this.setState({
newTodo: e.detail.value
})
}
addTodo () {
let { newTodo } = this.state
let { add } = this.props if (!newTodo) return
add(newTodo)
this.setState({
newTodo: ''
})
}
delTodo (id) {
let { del } = this.props
del(id)
}
render () {
// 獵取未經處置懲罰的todos並展現
let { newTodo } = this.state
let { todos, add, del } = this.props
const todosJsx = todos.map(todo => {
return (
{todo.text}-
)
})
return (



+

{ todosJsx }

)
}
}
export default connect (({ todos }) => ({
todos: todos.todos
}), (dispatch) => ({
add (data) {
dispatch(add(data))
},
del (id) {
dispatch(del(id))
}
}))(Index)

末了來看一眼完成的結果~~

《Taro集成Redux疾速上手》


推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
  • 前言:原本纠结于Web模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中ev ... [详细]
  • ReactJSUIAnt设计空组件原文:https://w ... [详细]
  • npminstall-Dbabelcorebabelpreset-envbabelplugin-transform-runtimebabelpolyfillbabel-loader ... [详细]
  • 前言:原本纠结于Web 模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中eval函数。虽然eval函 ... [详细]
  • 本文介绍了在Go语言中可见性与scope的规则,包括在函数内外声明的可见性、命名规范和命名风格,以及变量声明和短变量声明的语法。同时,还介绍了变量的生命周期,包括包级别变量和局部变量的生命周期,以及变量在堆和栈上分配的规则和逃逸分析的概念。 ... [详细]
author-avatar
猥琐叔装嫩小孩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有