React-Native开发总结-redux层面上的问题
来源:互联网 发布:双11淘宝能便宜多少 编辑:程序博客网 时间:2024/06/06 10:07
更新时间:2017年11月08日17:31:16
开发过react和react native的同学都知道,当应用比较大的时候,组件的状态(数据)会很难管理,尤其对于那些在组件间进行通信的数据,更难以把控(增加、删除、修改、查询)。办法总比困难多,出现问题,一定会出现解决问题的方法。redux的出现,正是为解决这一问题。
1、综述
redux是站在应用整体的高度来管理全部组件的状态或数据、组件之间的顶层通信解决方案;
store是存储以对象树形式呈现的state;
action是修改state的惟一方法;它是一个普通的JS对象,用来描述发生了什么;
reducers是描述action如何修改state树;它接收state和action,并返回新的state的函数;
2、实践
根组件注册redux,并且传入所有state,<Provider store> 使组件层级中的 connect() 方法都能够获得 Redux store。根组件应该嵌套在 <Provider> 中,其他组件才能使用 connect() 方法:
import {Provider} from 'react-redux'
import store from './src/redux/store/index.js'
inport Router from './routes'
render(){
return(<Provider store={store}><Router/></Provider>)
}
子路由使用redux,connect用于连接 React 组件与 Redux store,connect函数被调用两次,第一次是设置参数,第二次是组件与 Redux store 连接:
import {connect} from 'react-redux'
export default connect(state=>{userInfo: state.userInfo})(HomePage)
this.props.userInfo就可以拿到数据
3、redux API
cerateStore创建一个 Redux store 来以存放应用中所有的 state。应用中应有且仅有一个 store;
combineReducers 辅助函数的作用是,把一个由多个不同 reducer 函数作为 value 的 object,合并成一个最终的 reducer 函数,然后就可以对这个 reducer 调用 createStore。
4、使用redux意义
数据统一管理;
替代setState方法,提升组件性能,当redux中的数据发生变化,UI界面的相应数据也同时发生改变,而不用人为触发setState;
5、redux数据操作规范
redux数据属于单向数据流,不能直接操作数据,比如:
import store from './store'
let store = sotre.getState();
console.log(store.homepage.data);//{name:'wanshaobo'}
let data = store.homepage.data
data.name = ''wanshaobo123';
save(data);//非法操作,无效操作,store树中存储的值还是wanshaobo
reducers:
case:SAVE_DATA
return Object.assign({},state,{data});
action:
save(data){
store.dispatch({type:SAVE_DATA,data})
}
save(data)属于非法操作,无效操作,store树中存储的值还是wanshaobo,正确操作方案需要将redux中的数据深拷贝到本地,然后将本地的数据重新赋值给redux中,如下:
let data = JSON.parse(JSON.stringify(store.homepage.data));
6、操作redux数据中对象的某一个值
改变redux数据中的name属性,initState={person:{name:'wanshaobo',age:28}}
方案一:
save({name:'wanshaobo888',age:this.props.homepage.person.age});//store.getState().homepage.person.age
方案二:
let data = this.props.homepage.person;
data.name = 'wanshaobo888';
save(data);
- React-Native开发总结-redux层面上的问题
- React-Native开发总结-react层面上的问题
- React-Native开发总结-原生APP层面上的问题
- React-Native开发总结-html层面上的问题
- react-native,redux,redux-saga组合开发
- 基于 react-native+redux 开发的高仿 V2EX 客户端
- react-native,react-redux和redux配合开发
- react-native 简单的react-redux创建
- redux在react-native上使用(一)--加入redux
- redux在react-native上使用(二)--加入redux-saga
- redux在react-native上使用(三)--加入redux-thunk
- redux在react-native上使用(五)--redux-actions使用
- react-redux,redux,react native之间的关系
- React Native开发遇到的问题——总结
- 【React Native】导入github上react native遇到的问题。
- [React Native]Redux的基本使用方式
- [React Native]Redux的基本使用方式
- 基于 Redux 的 React Native 应用架构
- 求 用 C# 开发文件夹在 utf-8 无BOM 格式转与utf-8带BOM 格式相互转换
- .创建一个Rectangle类,计算矩形的周长和面积,编程利用Rectangle输出一个矩形的周
- spark连接es的问题java.lang.ClassNotFoundException:org.elasticsearch.client.transport.NoNodeAvailableExcep
- 对过长的字符串,导致页面样式乱了的处理
- java高并发-线程的基本使用
- React-Native开发总结-redux层面上的问题
- Linux deepin系统下配置nginx+php-fpm+PHPstorm并解决403/404/502/file not found错误
- List初始化赋值问题
- 配置phpStorm实现remote host远程同步开发
- Linux流量监控工具--iftop
- 【Kafka源码】KafkaController启动过程
- transform
- 使用maven加载项目中缺少的jar包
- Python做一个接口压测