• 本猪说

本猪猪刚学react,也刚看RN,就叫写这个,苦不堪言,搭环境就搭了好久。看网上教程也是改了好多小地方才写完了。本着雷锋精神手把手教你写(假的)。


  • 环境以及版本

我用的是安卓模拟器跑的,不过应该ios也适配吧。
这是我的demo的配置依赖的版本

  • 项目结构

红色的框框是需要我们自己建立的,因为这个demo的action比较简单,老师叫我把它写在Login.js里面了,所以没有写在action文件里。

  • 登录视图 screens/Login.js
import React, {Component} from 'react';
import { StyleSheet,Text, TextInput, View, Image, TouchableOpacity, Dimensions,Alert} from 'react-native';
import {connect} from 'react-redux';var {height, width} = Dimensions.get('window');class Login extends Component {constructor(props) {super(props);}----------onSubmit(userName,password){if(userName===''||password===''){Alert.alert('登陆失败!用户名或密码不能为空');  //弹出提示框} else{// 成功Alert.alert('user: '+userName+' password:'+password);}}// onSubmit()是点击登录按钮后调用的函数,这里的功能比较简单。这里输入不为空都可以,之后的逻辑后面的事了,先让我们取到输入值就ok了----------render() {----------const {userName,password,dispatch} = this.props;//这个是es6的赋值语法。这里可以获取到dispath,是因为我们在下面会用到**connect**封装。当你用React Redux的connect进行封装的时候,connect方法会把dispatch放到props中
----------return (<View style={styles.wrapper}><Imagestyle={{width: 90, height: 90, margin:30, borderRadius:50}}source={{uri:'这里放你可爱的头像'}}/><TextInput style={styles.textInput} placeholder="请输入用户名"**onChangeText={(userName)=>{dispatch({type: 'LOGINUSER', userName:userName})}}**/>----------
组件发出请求,也就是action。通过dispatch把action发出去----------<TextInput style={styles.textInput} placeholder="密码" secureTextEntry={true}**onChangeText={(password)=>{dispatch({type: 'LOGINPASS', password:password})}}**/><TouchableOpacity style={styles.button} activeOpacity={0.6} **onPress={this.onSubmit.bind(this,userName,password)}**><Text style={styles.buttonText}>登录</Text></TouchableOpacity></View>)}
}const styles = StyleSheet.create({wrapper:{paddingTop:40,flex:1,alignItems:'center',// backgroundColor:'#444',backgroundColor:'#e7cbcb'},textInput:{backgroundColor:'#eee',borderColor: 'gray',borderWidth: 2,width:width,height:60,marginBottom:10,textAlign:'center',fontSize:18},button: {backgroundColor: '#808182',// backgroundColor: '#64d0ee',height:60,width:width},buttonText: {color:'#fff',height:60,lineHeight:60,textAlign:'center',fontSize:18,fontWeight:'600'}
});//声明组件需要整个 store 中的哪一部分数据作为自己的 props
function selector(store) {return {userName:store.userName ,password:store.password}
}//connect将store和组件联系在一起
export default connect(selector)(Login);
  • 编写renducer reducers/LoginReducer.js

reducer是负责生成state的,所以在大项目中还会用到combineReducers 合并reducer。不过我们这个小,只有一个,就不用了。
ps:我这里后来改了个写法,所以新增了一个文件。

LoginType.js

export const LOGINUSER= 'LOGINUSER';
export const LOGINPASS='LOGINPASS';

reducers/LoginReducer.js (这里还装了个依赖redux-actions)

import {handleActions} from 'redux-actions';
import {LOGINPASS, LOGINUSER} from "./types/LoginType";export default handleActions({[LOGINUSER] (state, action){return {...state,userName:action.userName,}},[LOGINPASS] (state, action){return {...state,password:action.password,}}
}, {userName:'',password:''
})
  • 最后App.js 导入我们写好的login组件和reducer
import reducer from './reducers/LoginReducer';
import {Provider} from 'react-redux';
import {createStore} from 'redux';
import React, { Component } from 'react';import Login from './screens/Login';**let store = createStore(reducer);**type Props = {};
export default class App extends Component<Props> {render() {return (**<Provider store={store}><Login /></Provider>**)}
}
  • 结语

这样就完成这个demo了。我还在接着完善,现在在用react-navigation写登录跳转,loading啥的,所以也可以继续关注哦,写完了就放上来。
谢谢大噶看完了,一起继续努力!越努力越幸运!

基于react native的登录界面demo 超简易教程 redux版相关推荐

  1. 基于React Native的移动平台研发实践分享

    本文转自微信号EAWorld.扫描下方二维码,关注成功后,回复"普元方法+",将会获得热门课堂免费学习机会! 本文目录: 一.React Native 已经成为了移动前端技术的趋势 ...

  2. WPF登录界面demo

    概述: 此WPF登录界面demo用了自定义按钮样式和添加了窗体阴影,并加入了旋转.缩放等动画实现的,运行效果如下: App.xaml页面代码: <Application x:Class=&quo ...

  3. php注册登录描述,基于PHP实现用户登录注册功能的详细教程

    教程前先给大家看看小编的实现成果吧! 图1: 图2: 图3: 教程: 实现这个功能我们需要五个php文件: login.php (登录界面,如图2) 登录 登录页面 用户名: required=&qu ...

  4. 基于React、Typescript和Solidity的NFT完整教程

    基于React.Typescript和Solidity的NFT完整教程 了解如何使用 React / Next JS.Solidity 和 Pinata(IPFS) 在以太坊上创建 NFT 市场 课程 ...

  5. 计算机开机界面图片怎么修改,怎么修改Win7开机登录界面壁纸 Win7开机登录界面壁纸修改图文教程...

    怎么修改Win7开机登录界面壁纸?想给自己的Win7电脑开机登录界面换个个性的背景图片吗?长时间面对电脑默认的开机登录界面是不是感觉很烦,想给电脑换个开机登录界面背景,但又不知道怎么换?今天小编就教大 ...

  6. 基于 React Native 的 58 同城 App 开发实践

    作者简介: 彭飞,58 同城 iOS 客户端架构师.专注于新技术的研发,主要负责 App 端组件化架构以及性能优化,并已推广 React Native 在 58 同城 App 中业务场景的应用.在 M ...

  7. 基于React Native和Ethers.js的电子钱包(三):Ethers.js

    之前在学Solidity的时候知道了以太坊提供了一个JavaScript API--Web3.js--对以太坊进行API调用的工具包.但最近做RN的时候又发现了另外一种API--Ethers.js 在 ...

  8. 基于React Native和Ethers.js的电子钱包(二):路由和导航

    导航,即Navigator,app的功能入口: 路由,即Router,连接app各个功能的桥梁: RN里的导航和路由需要添加react-navigation依赖 如果你是强迫症,可以加上latest注 ...

  9. Kivy App开发之登录界面Demo

    登录界面是根据个人设想简单设计的,效果如下: 代码如下,新建login.kv <LoginPage>:FloatLayout:canvas.before:Rectangle:size:se ...

最新文章

  1. Visual Studio 15.8 Preview 3支持多点编辑功能
  2. kettle spoon中“表输入”到“表输出”的乱码问题
  3. copyproperties爆红_BeanUtils.copyProperties复制失败探究
  4. JZOJ 5406. 【NOIP2017提高A组模拟10.10】Tree
  5. boost::adaptors::type_erased相关的测试程序
  6. NetBeans Weekly News - Issue # 446 - Jul 20, 2010
  7. 很好的开源项目ranet-uilibrary-olap
  8. Mac 下安装配置 Python 开发环境
  9. JAVA中的toString()方法的用法
  10. python函数作用域与闭包_python函数名称空间与作用域、闭包
  11. oracle nls_lang gbk,Oracle客户端NLS_LANG参数的设置详解
  12. 【Linux命令】nm 查看动态库和静态库中的符号
  13. linux切换用户无法加载变量,Linux 中用户切换:su 和 su- 的使用 环境变量详解
  14. Final Project Proposal ——陈稳霖
  15. canvas绘制流程图
  16. LTE下行物理层传输机制(9)-集中式和分布式资源映射
  17. 重心法选址迭代matlab,配送中心重心法选址的研究
  18. 使用mergeAssets对Android的assets文件在构建的时候进行修改处理
  19. spring基于注解的AOP配置 中的环绕通知 步骤写法
  20. win10计算机怎么打开方式,Win10如何还原打开方式?还原打开方式的方法

热门文章

  1. 如何让控件span的id调用ajax_微服务架构之「 调用链监控 」
  2. Android开发中反编译时出现Unsupported major.minor version 51.0错误的问题
  3. java线程睡眠一分钟_Java中的TimerTimerTask和线程睡眠
  4. java压测请求线程数_程序员撕开京东 618 大促压测的另一面 | 原力计划
  5. mysql怎么实现事务序列化_MySQL 架构 - 事务处理
  6. linux csr蓝牙驱动,csr4.0蓝牙适配器驱动下载
  7. win7系统怎么样在计算机里找桌面,如何在64位win7电脑中创建一个“显示桌面”的快捷方式...
  8. 现代操作系统: 第八章 多处理机系统
  9. .net framework开发winform_这个Winform的UI库也太全了!四十多个控件都在这一个项目里了...
  10. 自动化监控--zabbix中的邮件报警通知详解