最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

react-native 完整實(shí)現(xiàn)登錄功能的示例代碼

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:30:40
文檔

react-native 完整實(shí)現(xiàn)登錄功能的示例代碼

react-native 完整實(shí)現(xiàn)登錄功能的示例代碼:react native實(shí)現(xiàn)登錄功能,包括ui的封裝、網(wǎng)絡(luò)請(qǐng)求的封裝、導(dǎo)航器的實(shí)現(xiàn)、點(diǎn)擊事件。 demo下載:react-native 完整實(shí)現(xiàn)登錄功能 后臺(tái)如果是springmvc實(shí)現(xiàn)的需要配置上如下代碼 <!--加入multipart 的解析器,這個(gè)必須配置,一會(huì)在controlle
推薦度:
導(dǎo)讀react-native 完整實(shí)現(xiàn)登錄功能的示例代碼:react native實(shí)現(xiàn)登錄功能,包括ui的封裝、網(wǎng)絡(luò)請(qǐng)求的封裝、導(dǎo)航器的實(shí)現(xiàn)、點(diǎn)擊事件。 demo下載:react-native 完整實(shí)現(xiàn)登錄功能 后臺(tái)如果是springmvc實(shí)現(xiàn)的需要配置上如下代碼 <!--加入multipart 的解析器,這個(gè)必須配置,一會(huì)在controlle

react native實(shí)現(xiàn)登錄功能,包括ui的封裝、網(wǎng)絡(luò)請(qǐng)求的封裝、導(dǎo)航器的實(shí)現(xiàn)、點(diǎn)擊事件。

demo下載:react-native 完整實(shí)現(xiàn)登錄功能

后臺(tái)如果是springmvc實(shí)現(xiàn)的需要配置上如下代碼

 <!--加入multipart 的解析器,這個(gè)必須配置,一會(huì)在controller里抓取上傳文件時(shí)要用。否則會(huì)報(bào)錯(cuò)。-->
 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

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

 <property name="defaultEncoding" value="utf-8"/><!--屬性:編碼-->

 </bean>

1.實(shí)現(xiàn)的界面

這里寫圖片描述

2.完整目錄

這里寫圖片描述

3.主界面的代碼實(shí)現(xiàn)

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='輸入用戶名/注冊(cè)手機(jī)號(hào)' 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();
 })


 };

 //跳轉(zhuǎn)到第二個(gè)頁面去
 onLoginSuccess(){
 const { navigator } = this.props;
 if (navigator) {
 navigator.push({
 name : 'LoginSuccess',
 component : LoginSuccess,
 });
 }
 }

}

class loginLineView extends Component {
 render() {
 return (
 <Text >
 沒有帳號(hào)
 </Text>
 );
 }
}

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

說明:

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

2.EditView和LoginButton 為自定義控件,實(shí)現(xiàn)輸入框,和按鈕的封裝。

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 方法獲取到輸入框中輸入的數(shù)據(jù),在利用EditView 傳入的onChangeText回調(diào)方法,把數(shù)據(jù)回調(diào)出封裝的EditView,在外部獲取到TextInput輸入的數(shù)據(jù)。

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實(shí)現(xiàn)點(diǎn)擊效果,onPress是點(diǎn)擊時(shí)調(diào)用,當(dāng)點(diǎn)擊時(shí)onPress觸發(fā),調(diào)用外部傳入的onPressCallback 方法實(shí)現(xiàn)觸發(fā)事件在封裝的LoginButton外部定義觸發(fā)的效果。

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;

說明:網(wǎng)絡(luò)方法,依次傳入請(qǐng)求地址,請(qǐng)求參數(shù),成功回調(diào)事件

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 = {};

 }
 //回到第一個(gè)頁面去
 onJump(){
 const { navigator } = this.props;
 if (navigator) {
 navigator.pop();
 }
 }

 render(){
 return (

 <View >
 <TouchableOpacity onPress = {this.onJump.bind(this)}>
 <Text> 登錄成功,點(diǎn)擊返回登錄頁面 </Text>
 </TouchableOpacity>
 </View>


 );

 }

}

說明:登錄成功后跳轉(zhuǎn)的界面

8.navigator.js

導(dǎo)航器控制類。利用name,component 實(shí)現(xiàn)導(dǎo)航(可以自己隨便定義命名,只要后面的類中訪問同樣的命名即可,課參考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

規(guī)定的類

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

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

react-native 完整實(shí)現(xiàn)登錄功能的示例代碼

react-native 完整實(shí)現(xiàn)登錄功能的示例代碼:react native實(shí)現(xiàn)登錄功能,包括ui的封裝、網(wǎng)絡(luò)請(qǐng)求的封裝、導(dǎo)航器的實(shí)現(xiàn)、點(diǎn)擊事件。 demo下載:react-native 完整實(shí)現(xiàn)登錄功能 后臺(tái)如果是springmvc實(shí)現(xiàn)的需要配置上如下代碼 <!--加入multipart 的解析器,這個(gè)必須配置,一會(huì)在controlle
推薦度:
標(biāo)簽: 代碼 React native
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top