react-native 完整实现登录功能的示例代码

发布时间 - 2026-01-11 03:12:05    点击率:

react native实现登录功能,包括ui的封装、网络请求的封装、导航器的实现、点击事件。

demo下载:react-native 完整实现登录功能

后台如果是springmvc实现的需要配置上如下代码

 <!--加入multipart 的解析器,这个必须配置,一会在controller里抓取上传文件时要用。否则会报错。-->
  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

    <property name="maxUploadSize" value="102400"></property>

    <property name="defaultEncoding" value="utf-8"/><!--属性:编码-->

  </bean>

1.实现的界面

2.完整目录

3.主界面的代码实现

import React, { Component } from 'react';
import {
 ToolbarAndroid,
 AppRegistry,
 StyleSheet,
 Text,
 View,
 Image,
 TextInput,
 TouchableOpacity
} from 'react-native';
import EditView from '../lib/EditView';
import LoginButton from '../lib/LoginButton';
import LoginSuccess from '../ui/LoginSuccess';
import NetUitl from '../lib/NetUtil';
export default class LoginActivity extends Component {
 constructor(props) {
  super(props);
  this.userName = "";
  this.password = "";
 }

 render() {
   return (

  <View style={LoginStyles.loginview}>
   <View  style={{flexDirection: 'row',height:100,marginTop:1,
    justifyContent: 'center',
    alignItems: 'flex-start',}}>
    <Image source={require('../image/login.png')}/>
   </View>
   <View style={{marginTop:80}}>
    <EditView name='输入用户名/注册手机号' onChangeText={(text) => {
      this.userName = text;
    }}/>
    <EditView name='输入密码' onChangeText={(text) => {
      this.password = text;
    }}/>
    <LoginButton name='登录' onPressCallback={this.onPressCallback}/>
    <Text style={{color:"#4A90E2",textAlign:'center',marginTop:10}} >忘记密码?</Text>
   </View>
   </View>
  )
 }


 onPressCallback = () => {
  let formData = new FormData();
  formData.append("loginName",this.userName);
  formData.append("pwd",this.password);
  let url = "http://localhost:8080/loginApp";
  NetUitl.postJson(url,formData,(responseText) => {
     alert(responseText);
     this.onLoginSuccess();
  })


 };

 //跳转到第二个页面去
  onLoginSuccess(){
   const { navigator } = this.props;
   if (navigator) {
    navigator.push({
     name : 'LoginSuccess',
     component : LoginSuccess,
    });
   }
  }

}

class loginLineView extends Component {
 render() {
  return (
    <Text >
      没有帐号
     </Text>
  );
 }
}

const LoginStyles = StyleSheet.create({
 loginview: {
  flex: 1,
  padding: 30,
   backgroundColor: '#ffffff',
 },
});

说明:

1.使用了线性布局,从上往下依次Image,EditView,LoginButton,Text

2.EditView和LoginButton 为自定义控件,实现输入框,和按钮的封装。

4.EditView.js

import React, { Component } from 'react';
import {
 ToolbarAndroid,
 AppRegistry,
 StyleSheet,
 Text,
 View,
 Image,
 TextInput,
 TouchableOpacity
} from 'react-native';
export default class EditView extends Component {
 constructor(props) {
  super(props);
  this.state = {text: ''};
 }

 render() {
  return (
   <View style={LoginStyles.TextInputView}>
    <TextInput style={LoginStyles.TextInput}
     placeholder={this.props.name}
     onChangeText={
      (text) => {
       this.setState({text});
       this.props.onChangeText(text);
      }
    }
    />
    </View>
  );
 }
}


const LoginStyles = StyleSheet.create({
 TextInputView: {
  marginTop: 10,
  height:50,
  backgroundColor: '#ffffff',
  borderRadius:5,
  borderWidth:0.3,
  borderColor:'#000000',
  flexDirection: 'column',
  justifyContent: 'center',
 },

 TextInput: {
  backgroundColor: '#ffffff',
  height:45,
  margin:18,
 },
});

说明:

1.利用TextInput的onChangeText 方法获取到输入框中输入的数据,在利用EditView 传入的onChangeText回调方法,把数据回调出封装的EditView,在外部获取到TextInput输入的数据。

5.LoginButton.js

import React, { Component } from 'react';
import {
 ToolbarAndroid,
 AppRegistry,
 StyleSheet,
 Text,
 View,
 Image,
 TextInput,
 TouchableOpacity
} from 'react-native';
export default class LoginButton extends Component {
 constructor(props) {
  super(props);
  this.state = {text: ''};
 }
 render() {
  return (
   <TouchableOpacity onPress={this.props.onPressCallback} style={LoginStyles.loginTextView}>
    <Text style={LoginStyles.loginText} >
      {this.props.name}
    </Text>
   </TouchableOpacity>
  );
 }
}
const LoginStyles = StyleSheet.create({

 loginText: {
  color: '#ffffff',
   fontWeight: 'bold',
   width:30,
 },
 loginTextView: {
  marginTop: 10,
  height:50,
  backgroundColor: '#3281DD',
  borderRadius:5,
  flexDirection: 'row',
  justifyContent: 'center',
  alignItems:'center',
 },
});

说明:

1.利用TouchableOpacity包住Text实现点击效果,onPress是点击时调用,当点击时onPress触发,调用外部传入的onPressCallback 方法实现触发事件在封装的LoginButton外部定义触发的效果。

6.NetUtil.js

let NetUtil = {
 postJson(url, data, callback){
    var fetchOptions = {
     method: 'POST',
     headers: {
      'Accept': 'application/json',
      'Content-Type': 'multipart/form-data;boundary=6ff46e0b6b5148d984f148b6542e5a5d'
     },
     body:data
    };

    fetch(url, fetchOptions)
    .then((response) => response.text())
    .then((responseText) => {
     // callback(JSON.parse(responseText));
      callback(responseText);
    }).done();
 },
}
export default NetUtil;

说明:网络方法,依次传入请求地址,请求参数,成功回调事件

7.LoginSuccess.js

import React from 'react';
import {
  View,
  Navigator,
  TouchableOpacity,
  ToolbarAndroid,
  Text
} from 'react-native';
export default class LoginSuccess extends React.Component {
  constructor(props){
    super(props);
    this.state = {};

  }
  //回到第一个页面去
  onJump(){
    const { navigator } = this.props;
    if (navigator) {
      navigator.pop();
    }
  }

  render(){
    return (

      <View >
        <TouchableOpacity onPress = {this.onJump.bind(this)}>
          <Text> 登录成功,点击返回登录页面 </Text>
        </TouchableOpacity>
      </View>


    );

  }

}

说明:登录成功后跳转的界面

8.navigator.js

导航器控制类。利用name,component 实现导航(可以自己随便定义命名,只要后面的类中访问同样的命名即可,课参考LoginSuccess.js 中的返回功能)

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, { Component } from 'react';
import {
 AppRegistry,
 StyleSheet,
 Text,
 View,
 Navigator
} from 'react-native';
import Main from './ui/main';
export default class navigator extends Component {
  constructor(props) {
   super(props);
  }
  render() {
  let defaultName = 'Main';
  let defaultComponent = Main;
  return (
   <Navigator
    initialRoute = {{name : defaultName , component: defaultComponent}}
    configureScene = {(route) => {
     return Navigator.SceneConfigs.VerticalDownSwipeJump;
    }}
    renderScene={(route,navigator) => {
      let Component = route.component;
      return <Component {...route.params} navigator = {navigator} />
    }}
    />
  );
 }

};

9.index.android.js

规定的类

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */
import React, { Component } from 'react';
import {
 ToolbarAndroid,
 AppRegistry,
 StyleSheet,
 Text,
 View,
 Image,
 TextInput,
 TouchableOpacity
} from 'react-native';
import Navigator from './app/navigator';
AppRegistry.registerComponent('AwesomeProject', () => Navigator);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# react-native实现登录  # reactnative  # 登录  # reactnative登录界面  # React Native实现简单的登录功能(推荐)  # React实现登录表单的示例代码  # React利用路由实现登录界面的跳转  # 浅谈React-router v6 实现登录验证流程  # react.js实现页面登录跳转示例  # 工程级 React 注册登录全栈级流程分析  # React实现简单登录的项目实践  # 回调  # 第一个  # 会在  # 帐号  # 第二个  # 自定义  # 忘记密码  # 跳转  # 报错  # 往下  # 输入用户名  # 时要  # 则会  # 大家多多  # 输入框  # 跳转到  # 输入密码  # 上传文件  # 类中  # 框中输入 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Laravel如何实现一对一模型关联?(Eloquent示例)  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  如何在云主机上快速搭建网站?  历史网站制作软件,华为如何找回被删除的网站?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  再谈Python中的字符串与字符编码(推荐)  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  如何在VPS电脑上快速搭建网站?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  想要更高端的建设网站,这些原则一定要坚持!  如何正确下载安装西数主机建站助手?  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  制作电商网页,电商供应链怎么做?  javascript基本数据类型及类型检测常用方法小结  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  如何做网站制作流程,*游戏网站怎么搭建?  免费视频制作网站,更新又快又好的免费电影网站?  图册素材网站设计制作软件,图册的导出方式有几种?  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  Laravel怎么在Controller之外的地方验证数据  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  动图在线制作网站有哪些,滑动动图图集怎么做?  微信小程序 canvas开发实例及注意事项  如何在阿里云部署织梦网站?  如何登录建站主机?访问步骤全解析  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  Linux安全能力提升路径_长期防护思维说明【指导】  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  怎样使用JSON进行数据交换_它有什么限制  如何在万网ECS上快速搭建专属网站?  EditPlus中的正则表达式 实战(2)  网站制作软件免费下载安装,有哪些免费下载的软件网站?  如何在 Pandas 中基于一列条件计算另一列的分组均值  成都网站制作公司哪家好,四川省职工服务网是做什么用?  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  如何在阿里云虚拟主机上快速搭建个人网站?  如何快速查询网址的建站时间与历史轨迹?  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  高防服务器租用首荐平台,企业级优惠套餐快速部署  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  轻松掌握MySQL函数中的last_insert_id()