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总结的更多相关文章

  1. [RN] React Native 使用 Redux 比较详细和深刻的教程

    React Native 使用 Redux 比较详细和深刻的教程 React Native 使用 Redux https://www.jianshu.com/p/06fc18cef56a http:/ ...

  2. React Native集成Redux框架讲解与应用

    学过React Native的都知道,RN的UI是根据相应组件的state进行render的,而页面又是由大大小小的组件构成,导致每个组件都必须维护自身的一套状态,因此当页面复杂化的时候,管理stat ...

  3. react native 之 redux 使用套路

    redux是什么?他是一个state容器 redux的运作方式是怎样的? 接入方式: 1. npm install 下列内容: npm install --save redux npm install ...

  4. react native 之 redux

    第一章  认识redux 说的通俗且直白一点呢,就是redux提供了一个store,独立的一个内存区,然后放了一些state,你可以在任何component中访问到state,这些state要更改怎么 ...

  5. [转] 学习React Native必看的几个开源项目

    http://www.lcode.org/study-react-native-opensource-one/ http://gold.xitu.io/entry/575f498c128fe10057 ...

  6. 学习React Native必看的几个开源项目

    学习React native ,分享几个不错的开源项目,相信你学完之后,一定会有所收获.如果还没有了解RN的同学们可以参考手把手教你React Native 实战之开山篇<一> 1.Fac ...

  7. 从React Native到微服务,落地一个全栈解决方案

    Poplar是一个社交主题的内容社区,但自身并不做社区,旨在提供可快速二次开发的开源基础套件.前端基于React Native与Redux构建,后端由Spring Boot.Dubbo.Zookeep ...

  8. react native redux saga增加日志功能

    redux-logger地址:https://github.com/evgenyrodionov/redux-logger 目前Reac native项目中已经使用redux功能,异步中间件使用red ...

  9. 在 React Native 中使用 Redux 架构

    前言 Redux 架构是 Flux 架构的一个变形,相对于 Flux,Redux 的复杂性相对较低,而且最为巧妙的是 React 应用可以看成由一个根组件连接着许多大大小小的组件的应用,Redux 也 ...

随机推荐

  1. Java&Selenium Web自动化测试框架理念

    一.自动化测试含义 在自动化测试领域内流传着一个说法:单元测试才是自动化测试的核心,在自动化测试里,无论框架何等完美都不可能脱离单元测试,单元测试将会是自动化测试里最小的单位,把它看作单位一,若干个单 ...

  2. Linux命令之nano(简单文本编辑器)

    nano 字符终端文本编辑器 补充说明 nano 是一个字符终端的文本编辑器,有点像DOS下的editor程序.它比vi/vim要简单得多,比较适合Linux初学者使用.某些Linux发行版的默认编辑 ...

  3. SendMessage到底是如何工作的?

    以下内容摘自<<Windows核心编程>>: 概要: SendMessage对于在同一个线程中调用的话,直接调用的是当前线程所属窗口的窗口过程函数(WndProc);如果是跨线 ...

  4. ACM-ICPC 2016 大连赛区现场赛 K. Guess the number && HDU 5981(思维+DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5981 题意:A在[L, R]之间随机选取一个数X,之后B来猜这个数,如果猜的数比X小,那么A就告诉B猜 ...

  5. 题解 [51nod1673] 树有几多愁

    题面 解析 这题思路挺秒啊. 本麻瓜终于找了道好题了(还成功把ztlztl大仙拖下水了) 看到叶子节点数<=20就应该是状压啊. 然而DP要怎么写啊? 首先,考虑到编号肯定是从下往上一次增大的, ...

  6. 响应json数据之发送ajax的请求

    一.前端异步请求代码: <span style="font-size:14px;">$.ajax ({ type: "POST", //请求的方式 ...

  7. 桥接模式(Bridge)---结构型

    1 基础知识 定义:将抽象部分与它的具体实现部分分离,使得它们都可以独立变化.特征:通过组合的方式建立两个之间的联系而不是继承. 使用场景:抽象和具体实现之间增加更多的灵活性:一个类存在两个(多个)独 ...

  8. PHP大文件分片上传

    前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...

  9. IntelliJ 如何显示代码的代码 docs

    希望能够在 IntelliJ 代码上面显示方法的 docs. 如何进行显示? 你可以使用 Ctrl + Q 这个快捷键来查看方法的 Docs. https://blog.ossez.com/archi ...

  10. copy语法

    copy 和 mutableCopy 一个对象使用copy或者mutableCopy方法可以创建对象的副本 --------------- copy - 需要先实现NSCopying协议,创建的是不可 ...