React Native使用Redux总结
1>npm安装redux:
"react-redux": "^5.0.5",
"redux": "^3.7.1",
"redux-thunk": "^2.2.0"
2>大致结构目录如下:

3>ActionTypes.js:
在使用redux过程中,需要给每个动作添加一个actionTypes类型,可以说是标示;
// 接收数据
export const RECEIVE_BEAUTY_LIST = 'RECEIVE_BEAUTY_LIST';
export const BACKIMAGE_URL = 'BACKIMAGE_URL';
4>Store: 就是保存数据的地方,你可以把它看成一个容器。整个应用只能有一个 Store。
5>State:Store对象包含所有数据。如果想得到某个时点的数据,就要对 Store 生成快照。这种时点的数据集合,就叫做 State。
当前时刻的 State,可以通过store.getState()拿到。
/**
* 创建Store,整合Provider
* @flow
*/
import thunk from 'redux-thunk';
import { createStore, applyMiddleware, compose } from 'redux';
import rootReducer from './../Reducers/RootReducers'; let store = createStore(rootReducer, {}, compose(
applyMiddleware(thunk),
window.devToolsExtension ? window.devToolsExtension() : f => f
)) export default store;
6>Actions:
State 的变化,会导致 View 的变化。但是,用户接触不到 State,只能接触到 View。所以,State 的变化必须是 View 导致的。Action 就是 View 发出的通知,表示 State 应该要发生变化了。
Action 是一个对象。其中的type属性是必须的,表示 Action 的名称。
import * as types from './../ActionTypes';
import {
AsyncStorage,
} from 'react-native';
let KEY = 'PSMeiTuan';
export function backImage() {
return dispatch => {
return AsyncStorage.getItem(KEY,(Error,result)=>{
if (result === null){
// 使用dispatch存储值
dispatch(getBackImage('img'))
} else {
console.log('获取图片成功' + result);
dispatch(getBackImage(result));
}
});
}
};
export function getBackImage(imageURL) {
return {
type: types.BACKIMAGE_URL,
imageURL // 键值相等可以直接这么写
}
}
7>Reducers:
Store 收到 Action 以后,必须给出一个新的 State,这样 View 才会发生变化。这种 State 的计算过程就叫做 Reducer。
Reducer 是一个函数,它接受 Action 和当前 State 作为参数,返回一个新的 State。
import * as types from './../ActionTypes';
const initialState = {
loading: false,
beauty: [],
imageURL: 'https://ws1.sinaimg.cn/large/610dc034ly1fgllsthvu1j20u011in1p.jpg'
}
export default function beautyReducers(state = initialState, action) {
switch (action.type) {
case types.RECEIVE_BEAUTY_LIST:
console.log('收到消息');
return Object.assign({}, state, {
loading: true,
beauty: action.beauty
});
case types.BACKIMAGE_URL:
return Object.assign({}, state, {
imageURL:action.imageURL
});
default:
return state;
}
}
8>connect连接页面和Reducer:<这里只记录一个页面选择图片,使用redux保存图片,另一个页面展示选择的图片>
BeautyPage.js选择图片页面:
// 导入相关类
import { connect } from 'react-redux';
import {fetchBeautyGirlData} from './../../../Redux/Actions/BeautifulGirlAction';
import { backImage, getBackImage } from './../../../Redux/Actions/BackImageAction';;
// 连接reducer
export default connect((state) => {
const { beautyReducers } = state; // 这里的beautyReducers注意和对应的reducer文件export的类相同
return {
beautyReducers
}
}, { backImage,getBackImage, fetchBeautyGirlData })(BeautyPage) // 这里是对应的存值的方法,BeautyPage是导出当前模块
// 点击图片,保存图片
onImageClick(item) {
// alert(item.url);
const {navigate,goBack,state} = this.props.navigation;
// 方法一: 在第二个页面,在goBack之前,将上个页面的方法取到,并回传参数,这样回传的参数会重走render方法
// state.params.callback(item.url);
let KEY = 'PSMeiTuan';
AsyncStorage.setItem(KEY,item.url,(error)=>{
if (error){
console.log('存储失败' + error);
} else {
console.log('存储成功');
// 方法二: 这里可以发送通知到首页
// DeviceEventEmitter.emit('SHITUIMAGE',url);
// 方法三:
this.props.getBackImage(item.url);
}
});
// 返回当前页
goBack();
}
ReduxDemo.js对图片进行显示:
import { backImage,getBackImage } from './../../../Redux/Actions/BackImageAction';
连接reducer:
export default connect((state) => {
const { beautyReducers } = state;
return {
beautyReducers
};
},{ backImage,getBackImage })(ReduxDemo)
/**
* 此页面调用顺序:
* 1>render;
* 2>componentDidMount;
* 3>componentWillReceiveProps;
* 4>render;
*/
// 使用
componentDidMount(){
console.log('componentDidMount');
// 使用backImage方法。
this.props.backImage();
} componentWillReceiveProps(nextProps){
console.log('componentWillReceiveProps');
// 最开始的值
console.log(nextProps.beautyReducers);
// 之前存储的值
console.log(this.props.beautyReducers); const { navigate } = this.props.navigation;
const { imageURL } = nextProps.beautyReducers; if (this.props.beautyReducers.imageURL !== imageURL){
if (imageURL) {
imageUri = imageURL;
}
}
}
暂时的理解就是Redux可以用来数据请求的时候以state存储数据,某个页面值改变进行值的存储,以实现不同页面都可以很轻松的取得数据.
暂时只实现和掌握了简单的使用,高级用法后面学习积累!!!
React Native使用Redux总结的更多相关文章
- [RN] React Native 使用 Redux 比较详细和深刻的教程
React Native 使用 Redux 比较详细和深刻的教程 React Native 使用 Redux https://www.jianshu.com/p/06fc18cef56a http:/ ...
- React Native集成Redux框架讲解与应用
学过React Native的都知道,RN的UI是根据相应组件的state进行render的,而页面又是由大大小小的组件构成,导致每个组件都必须维护自身的一套状态,因此当页面复杂化的时候,管理stat ...
- react native 之 redux 使用套路
redux是什么?他是一个state容器 redux的运作方式是怎样的? 接入方式: 1. npm install 下列内容: npm install --save redux npm install ...
- react native 之 redux
第一章 认识redux 说的通俗且直白一点呢,就是redux提供了一个store,独立的一个内存区,然后放了一些state,你可以在任何component中访问到state,这些state要更改怎么 ...
- [转] 学习React Native必看的几个开源项目
http://www.lcode.org/study-react-native-opensource-one/ http://gold.xitu.io/entry/575f498c128fe10057 ...
- 学习React Native必看的几个开源项目
学习React native ,分享几个不错的开源项目,相信你学完之后,一定会有所收获.如果还没有了解RN的同学们可以参考手把手教你React Native 实战之开山篇<一> 1.Fac ...
- 从React Native到微服务,落地一个全栈解决方案
Poplar是一个社交主题的内容社区,但自身并不做社区,旨在提供可快速二次开发的开源基础套件.前端基于React Native与Redux构建,后端由Spring Boot.Dubbo.Zookeep ...
- react native redux saga增加日志功能
redux-logger地址:https://github.com/evgenyrodionov/redux-logger 目前Reac native项目中已经使用redux功能,异步中间件使用red ...
- 在 React Native 中使用 Redux 架构
前言 Redux 架构是 Flux 架构的一个变形,相对于 Flux,Redux 的复杂性相对较低,而且最为巧妙的是 React 应用可以看成由一个根组件连接着许多大大小小的组件的应用,Redux 也 ...
随机推荐
- 学习kafka笔记
一:概念 Kafka是一个分布式的消息队列,相当于我们生活中的快递柜,快递点,快递员将快递放到快递柜中,收件人去取,把快递(消息)的入柜(入队)和处理进行解耦,使得双方以自己合适的时间和频率处理快递, ...
- 记一次基于 mpvue 的小程序开发及上线实战
小程序名称:一起打车吧 项目地址: 客户端:https://github.com/jrainlau/taxi-together-client 服务端:https://github.com/jrainl ...
- python改成了python3的版本,那么这时候yum就出问题了
既然把默认python改成了python3的版本,那么这时候yum就出问题了,因为yum貌似不支持python3,开发了这个命令的老哥也不打算继续写支持python3的版本了,所以,如果和python ...
- springAOP分析
参考https://www.cnblogs.com/liuyk-code/p/9886033.html 在springboot中自动引入了配置文件AopAutoConfiguration @Confi ...
- 使用StringBuilder写XML遭遇UTF-16问题
http://www.cnblogs.com/jans2002/archive/2007/08/05/843843.html
- joxj 模拟赛 2019年9月3日
比赛题目来源:2018qbxt合肥Day1 T1 最小公倍数 题意:已知正整数n,求n与246913578的最小公倍数,结果对1234567890取模 数据范围:1<=n<=1010000 ...
- 计算(calc.cpp) 这题我搞了2晚上qwq
终于会了!可喜可贺!可喜可贺! 计算(calc.cpp) [问题描述] 小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)” ...
- jQuery系列(九):JS的事件流的概念
1.事件概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以向文档或者文档中的元素添加事件侦听器来预订事件.想要知道这些事件是在 ...
- 简易学生成绩管理管理系统(java描述)
没正式学过java,但是系统学过C++后,初略的看了下java的基本语法,于是我就尝试着用java来写个简单的学生管理系统,功能不齐全,以后有空再补充吧. 写的时候定义了不同的包名字,如jeaven1 ...
- single-pass单遍聚类方法
一.通常关于文本聚类也都是针对已有的一堆历史数据进行聚类,比如常用的方法有kmeans,dbscan等.如果有个需求需要针对流式文本进行聚类(即来一条聚一条),那么这些方法都不太适用了,当然也有很多其 ...