欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-28 23:47:37
react native实现登录功能,包括ui的封装、网络请求的封装、导航器的实现、点击事件。 demo下载: 后台如果是springmvc实现的需要配置上如下代码...

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

demo下载:

后台如果是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.实现的界面

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

2.完整目录

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

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);

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