๐ซ ์ค๋์ ๋ฏธ์
React์ state์ event ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ ์ js๋ก ๊ตฌํํ๋ ๋ก๊ทธ์ธ ๋ฒํผ ํ์ฑํ ๊ธฐ๋ฅ์ React๋ก ๋ณํํด ๋ณด๊ฒ ๋ค.
#Routes.js
import LoginSejun from './pages/sejun/Login/Login';
class Routes extends React.Component {
constructor(props) {
super(props);
this.state = {
id: 0,
pw: 0,
};
}
render() {
return (
<Router>
<Nav />
<Switch>
<Route exact path="/login-sejun" component={LoginSejun} />
.
.
.
#Login.js
import React from 'react';
import { Link } from 'react-router-dom';
import './Login.scss';
class Login extends React.Component {
render() {
return (
<div className="loginBoard">
<div className="logo">Westagram</div>
<form action="" className="loginTable">
<input
onChange={function handleInput(e) {
this.setState({
id: e.target.value,
});
e.preventDefault();
}.bind(this)}
type="text"
placeholder="์ ํ๋ฒํธ, ์ฌ์ฉ์ ์ด๋ฆ ๋๋ ์ด๋ฉ์ผ"
className="loginId"
/>
{console.log(this.state)}
.
.
.
Login.js์ input ์์ onChange ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด id ์ pw ๊ฐ Routes.js์ this.state ์ ๊ฐ์ฒดํํ๋ก ์ ๋ฌ๋๊ฒ ํ๊ณ ์ด๋ฅผ console.log ๋ฅผ ํตํด ํ์ธํ๋ค.
๊ทธ๋ฌ๋ฉด ์์ ๊ฐ์ด input์ ๊ฐ์ด ๋ณํํ ๋๋ง๋ค this.state ๊ฐ์ ์ ๋ ฅ๋ ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ๋๊ณ console.log์ ์ ํ์ธ๋๋ค.
๐ ๊ณต๋ถํด์ผํ ๊ฒ
Login.js ์ input์ ๊ฐ์ Routes์ this.state๋ก ๋ณด๋ด์ฃผ์์ง๋ง, ์ด ๊ฐ์ ๋ค์ Login.js์ props๋ก ๊ฐ์ ธ์์ผํ๋๋ฐ Routes.js์ ์ด๋๋ฅผ ๊ฑด๋๋ ค์ผํ ์ง ๋ชฐ๋ผ์ ํด๊ฒฐํ์ง ๋ชปํ์๋ค.
=> Routes.js ๋ Routing์ ์ํ ์ปดํฌ๋ํธ๋ก ๊ฐ ์ปดํฌ๋ํธ์๋ ๋จ์ผ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค๊ณ ํ๋ค. ๋ฐ๋ผ์ Login.js ์์ฒด์์ this.state ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์ด ์ข์๋ณด์ธ๋ค.
state์ props ์ ๋ํ ์ฌ๋์๋ ํ์ต์ด ํ์ํ ๊ฒ ๊ฐ๋ค.
๐ ํด๊ฒฐ๋ฐฉ๋ฒ
Login ์ปดํฌ๋ํธ์ this.state ๊ฐ์ idVal, pwVal์ ์ด๊ธฐํ
#Login.js
class Login extends React.Component {
constructor(props) {
super(props);
this.state = {
idVal: '',
pwVal: '',
};
}
id์ pw์ input์ ๊ฐ์ด ์ ๋ ฅ๋๋ฉด ์ ๋ ฅ๋ ๊ฐ์ด idVal๊ณผ pwVal๋ก ์ ๋ฌ๋์ด ์ ์ฅ
render() {
return (
<div className="loginBoard">
<div className="logo">Westagram</div>
<form action="" className="loginTable">
<input
onChange={function handleInput(e) {
this.setState({
idVal: e.target.value,
});
e.preventDefault();
}.bind(this)}
type="text"
placeholder="์ ํ๋ฒํธ, ์ฌ์ฉ์ ์ด๋ฆ ๋๋ ์ด๋ฉ์ผ"
className="loginId"
/>
<input
onChange={function handleInput(e) {
this.setState({
pwVal: e.target.value,
});
e.preventDefault();
}.bind(this)}
type="text"
placeholder="๋น๋ฐ๋ฒํธ"
className="loginPw"
/>
this.state์ ์ ์ฅ๋ idVal๊ณผ pwVal ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์ผํญ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ๋ก๊ทธ์ธ ๋ฒํผ ํ์ฑํ ๋ก์ง ๊ตฌํ
<Link to="/main-sejun" style={{ textDecoration: 'none' }}>
<button
className={
this.state.idVal.includes('@') && this.state.pwVal.length >= 5
? 'loginBtn active'
: 'loginBtn nonActive'
}
>
๋ก๊ทธ์ธ
</button>
</Link>
</form>
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React | ๋์ ๋ผ์ฐํ (0) | 2022.01.26 |
---|---|
React | props์ state (0) | 2022.01.14 |
React | Router ์์ฝ (0) | 2022.01.12 |
React | Routes Component & Sass (0) | 2022.01.11 |
React | CRA + TypeScript + Airbnb style guide ์ด๊ธฐ์ธํ (0) | 2022.01.05 |