Taro -- 使用 Redux 来进行全局变量的管理
前言
Redux是JavaScript 状态容器,提供可预测化的状态管理。一般来说,规模比较大的小程序,页面状态,数据缓存,需要管理的东西太多,这时候引入Redux可以方便的管理这些状态,同一数据,一次请求,应用全局共享。
而Taro也非常友好地为开发者提供了移植的Redux。
为了更方便地使用Redux
,Taro提供了与react-redux
API 几乎一致的包 @tarojs/redux
来让开发人员获得更加良好的开发体验。
使用 Redux 来进行全局变量的管理
1、在pages 同级目录新建4个文件夹。
store、actions、reducers、constants
store: 创建全局单一的store。
actions:用于描述发生什么事件。
reducers:用于action如何改变state树。
constants:用于定义所需的action type
常量。
//store/index.js文件 import { createStore, applyMiddleware, compose } from 'redux'
import thunkMiddleware from 'redux-thunk'
import rootReducer from '../reducers' const composeEnhancers =
typeof window === 'object' &&
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
// Specify extension’s options like name, actionsBlacklist, actionsCreators, serialize...
}) : compose const middlewares = [
thunkMiddleware
] if (process.env.NODE_ENV === 'development') {
middlewares.push(require('redux-logger').createLogger())
} const enhancer = composeEnhancers(
applyMiddleware(...middlewares),
// other store enhancers if any
) export default function configStore () {
const store = createStore(rootReducer, enhancer)
return store
}
首先在app.js
中引入一开始定义好的store
,使用@tarojs/redux
中提供的Provider
组件将前面写好的store
接入应用中,这样一来,被Provider
包裹的页面都能共享到应用的store
。
//app.js
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 (
<Provider store={store}>
<Index />
</Provider>
)
}
}
constants
文件夹来定义一系列所需的action type
常量
//constants/login.js export const LOGIN_TYPE = "login_type"
然后开始创建处理指令的reducers
。
// reducers/index.js import { combineReducers } from 'redux'
import login from "./login" export default combineReducers({
login
})
// reducers/login.js import {LOGIN_TYPE} from "../constants/login"
const INITIAL_STATE = {
loginType: false
} export default function login (state = INITIAL_STATE, action) {
switch (action.type) {
case LOGIN_TYPE:
return {
...state,
loginType: action.data
}
default:
return state
}
}
接着在actions
中定义函数对应的指令。
//actions/login.js import {LOGIN_TYPE} from "../constants/login" export const loginTypeFun = (data) => {
return {
type: LOGIN_TYPE,
data: data
}
}
最后实现数据状态的改变
//pages/index/index.js import Taro, { Component } from '@tarojs/taro'
import { View } from '@tarojs/components'
import { AtButton } from "taro-ui"
import './index.scss'
import { connect } from '@tarojs/redux'
import { loginTypeFun } from '../../actions/login'
@connect(({ login }) => ({
login
}), (dispatch) => ({
changeLoginType(data) {
dispatch(loginTypeFun(data)})
}
})) class Index extends Component {
constructor () {
super(...arguments)
this.state = ({ })
} config = {
navigationBarTitleText: '首页'
} componentWillMount() { } toChangeLogin = (e) => {
this.props.changeLoginType(true)
}
} render () {
return (
<View className='index'>
{this.props.login.loginType}
<AtButton type="primary" onClick={this.toChangeLogin}>改变状态loginType</AtButton>
</View>
)
}
} export default Index
输出结果true
Taro -- 使用 Redux 来进行全局变量的管理的更多相关文章
- [Taro] taro中定义以及使用全局变量
taro中定义以及使用全局变量 错误的姿势 // app.tsx文件中 class App extends Component { componentDidMount() { this.user = ...
- flux,redux,vuex状态集管理工具之间的区别
一:redux和flux的区别 1)redux是flux中的一个实现 2))在redux中我们只能定义一个store,在flux中我们可以定义多个 3)在redux中,store和dispatch都放 ...
- Taro -- 定义全局变量
Taro定义全局变量 方法1:在taro中 getApp()只能取到一开始定义的值,并不能取到改变后的值 // app.js文件中 class App extends Component { cons ...
- 使用Redux管理你的React应用
因为redux和react的版本更新的比较频繁,博客园这里用的redux版本是1.0.1,如果你关心最新版本的使用技巧,欢迎来我的Github查看(https://github.com/matthew ...
- Redux管理你的React应用
使用Redux管理你的React应用 因为redux和react的版本更新的比较频繁,博客园这里用的redux版本是1.0.1,如果你关心最新版本的使用技巧,欢迎来我的Github查看(https ...
- 微信小程序里使用 Redux 状态管理
微信小程序里使用 Redux 状态管理 前言 前阵子一直在做小程序开发,采用的是官方给的框架 wepy , 如果还不了解的同学可以去他的官网查阅相关资料学习:不得不说的是,这个框架确相比于传统小程序开 ...
- 小程序第三方框架对比 ( wepy / mpvue / taro )(转)
文章转自 https://www.cnblogs.com/Smiled/p/9806781.html 众所周知如今市面上端的形态多种多样,手机Web.ReactNative.微信小程序, 支付宝小程 ...
- 小程序第三方框架对比 ( wepy / mpvue / taro )
众所周知如今市面上端的形态多种多样,手机Web.ReactNative.微信小程序, 支付宝小程序, 快应用等,每一端都是巨大的流量入口,当业务要求同时在不同的端都要求有所表现的时候,针对不同的端 ...
- Vue学习记录-状态管理
要解决的问题 平时的系统开发中,基本都会碰到这个权限问题,需要根据用户的登录状态进行处理.最常见的情况就是“先登录,后使用”.除去打包成APP,无法看到连接外,如果地址栏里直接输入地址就能绕过登录的话 ...
随机推荐
- Activiti的分配任务负责人(八)
1分配任务负责人 1.1 固定分配 在进行业务流程建模时指定固定的任务负责人 在 properties 视图中,填写 Assignee 项为任务负责人.注意事项由于固定分配方式,任务只管一步一步执行任 ...
- 【Java】使用@Valid+BindingResult进行controller参数校验
@Valid @Valid注解用于校验,所属的包: javax.validation.Valid. 你可以定义实体,在实体的属性上添加校验规则,在API接收数据时添加@Valid注解,这时你的实体将会 ...
- sh_01_hello
sh_01_hello print("hello python") print("你好世界")
- spring- junit测试事务回滚
http://blog.csdn.net/molingduzun123/article/details/49383235
- selinux 了解2
凡是对内核级, 如selinux的修改, 不只是对软件, 程序的修改, 那么修改之后都要重新启动. 针对windows下的截图, 像linux下的screenshot截图那样设置快捷键 shift+s ...
- fedora安装ep,forge,fusion等第三方软件库
fedora安装ep,forge,fusion等第三方软件库 官方的发行版 抛弃了有 版权争议的 软件, 特别是 包括很多第三方的 多媒体软件, 如播放 mp3, flv等的软件 解码器 这就要靠 使 ...
- springboot定时任务出错 Unexpected use of scheduler.
java.lang.IllegalStateException: Unexpected use of scheduler. 在启动类加: @Bean public ThreadPoolTaskSche ...
- 数据存储-cookie、sessionstorage、localstorage
HTML5 Web Storage sessionStorage 和 localStorage 是 HTML5 Web Storage API 提供的,可以方便的在 web 请求之间保存数据.有了本地 ...
- javamail 附件以及正文加图片
直接上代码 import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.uti ...
- 测开之路九十六:css进阶之元素显示和可见性
元素显示效果:display 块级元素,会导致换行:p.div.h...内联元素,不会导致换行:span.strong... 修改属性 让span标签换行 让指定div不换行 元素可见性:visibi ...