axios를 사용하기 전에 설치되어야 할 패키지
npm install axios
Spring Boot로 작성된 컨트롤러가 다음과 같다면
@PostMapping("/login")
public MemberDto login(MemberDto dto) {
logger.info("MemberController login()");
return service.login(dto);
}
axios를 사용하기 위해 프론트엔드단에서 다음과 같이 사용한다.
function login() {
if (id.trim() === "") {
Alert.alert("아이디 입력 확인", "아이디가 입력되지 않았습니다.");
} else if (password.trim() === "") {
Alert.alert("비밀번호 입력 확인", "비밀번호가 입력되지 않았습니다.");
} else {
axios.post("http://192.168.35.149:3000/login",
null,
{ params: {id: id, pwd: password} }
).then(function(resp) {
console.log(resp.data);
if (resp.data !== null && resp.data != "") {
console.log("로그인 성공");
} else {
Alert.alert("로그인 실패", "아이디나 비밀번호를 확인하세요.");
}
}).catch(function(err) {
console.log(`Error Message: ${err}`);
})
}
이 함수를 컴포넌트에 onPress로 적용해준다. 이 때 get 방식으로 통신할 경우 파라미터에 null을 작성하지 않는다.
이 때, 로그인에 실패하였다면 사용자가 입력한 내용을 비워줄 수 있는데 로그인 실패에 대한 조건문에 setter를 추가해준다.
추가적으로 컴포넌트의 value를 getter로 지정해야한다.
완성된 코드는 다음과 같다.
import axios from "axios";
import React, { useState } from "react";
import { Image,
StyleSheet,
View,
TextInput,
Text,
TouchableOpacity,
Alert
} from "react-native";
const Login = ({navigation}:any) => { // 화면 이동을 위해 매개변수 navigation 넣어주기
const [id, setId] = useState("");
const [password, setPassword] = useState("");
function login() {
if (id.trim() === "") {
Alert.alert("아이디 입력 확인", "아이디가 입력되지 않았습니다.");
} else if (password.trim() === "") {
Alert.alert("비밀번호 입력 확인", "비밀번호가 입력되지 않았습니다.");
} else {
axios.post("http://192.168.35.149:3000/login",
null,
{ params: {id: id, pwd: password} }
).then(function(resp) {
console.log(resp.data);
if (resp.data !== null && resp.data != "") {
console.log("로그인 성공");
} else {
Alert.alert("로그인 실패", "아이디나 비밀번호를 확인하세요.");
setId("");
setPassword("");
}
}).catch(function(err) {
console.log(`Error Message: ${err}`);
})
}
}
return (
<View style={styles.container}>
<Image style={styles.image} source={ require("../../assets/logo2.png") } />
<View style={styles.inputView}>
<TextInput
style={styles.textInput}
placeholder="아이디"
placeholderTextColor="#003f5c"
onChangeText={(id) => setId(id)}
value={id}
/>
</View>
<View style={styles.inputView}>
<TextInput
style={styles.textInput}
textContentType="password"
placeholder="비밀번호"
placeholderTextColor="#003f5c"
value={password}
onChangeText={(password) => setPassword(password)}
secureTextEntry={true}
/>
</View>
{/* TouchableOpacity == Anchor */}
<TouchableOpacity
onPress={() => navigation.navigate("account")}
>
<Text style={styles.forgotButton}>회원가입</Text>
</TouchableOpacity>
<TouchableOpacity
style={styles.loginBtn}
onPress={() => login()}
>
<Text style={styles.whiteColor}>로그인</Text>
</TouchableOpacity>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#e9e9e9",
alignItems: "center",
justifyContent: "center",
},
image: {
marginBottom: 40,
},
inputView: {
backgroundColor: "#ffc0cb",
borderRadius: 30,
width: "70%",
height: 45,
marginBottom: 20,
alignItems: "center",
},
textInput: {
height: 50,
flex: 1,
padding: 10,
marginLeft: 20
},
forgotButton: {
height: 30,
marginBottom: 30
},
loginBtn: {
width: "50%",
borderRadius: 25,
height: 50,
alignItems: "center",
justifyContent: "center",
marginTop: 40,
backgroundColor: "#ff1493",
},
whiteColor: {
color: "#ffffff"
}
});
export default Login;
'Study > React' 카테고리의 다른 글
[React Native] 다른 페이지로 값 전달하기 (0) | 2022.03.23 |
---|---|
[React Native] axios를 사용한 비동기 통신과 장면 전환 (1) | 2022.03.11 |
[React Native] 다른 화면으로 전환하기 (0) | 2022.03.09 |
[React Native] ButtonNavBar 사용하기 (0) | 2022.03.09 |
[React Native] useContext (0) | 2022.03.09 |