# ๐ Instagram clone์ฝ๋ฉ์ ํด๋ณด์๋ค.
(์ด๋ฏธ์ง๋ ๊ตฌ์ฑ์ ๋๊ฐ์์ ์ฌ์ง์ ์๋ตํฉ๋๋น )
import React, { Component } from 'react';
import './Login.scss';
class LoginJihoo extends React.Component {
constructor() {
super();
this.state = {
id: '',
password: '',
};
}
// goToMain = () => {
// this.props.history.push('/main-jihoo');
// };
submitLoginInfo = () => {
// console.log('ํจ์ํธ์ถ ์ฑ๊ณต');
fetch('http://10.58.0.69:8000/user/signin', {
method: 'POST',
body: JSON.stringify({
// => ํ๋ก ํธ์์ ๋ฐฑ์ผ๋ก ์ ๋ณด๋ฅผ ์ฃผ๋๊ฒ
email: this.state.id,
password: this.state.password,
}),
})
.then(res => res.json()) //์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ฐ๊ฟ์ค๋ค.
.then(result => {
// const { history } = this.props; //history๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ ใ
if (result.message === 'INVALID_USER') {
// ๋ง์ง ์๋ ์ ์
alert('๋ค์ ๋ก๊ทธ์ธํด์ฃผ์ธ์');
} else if (result.access_token) {
localStorage.setItem('token', result.access_token);
this.props.history.push('/main-jihoo');
}
});
};
handleIdInput = e => {
//IdInput์ event์ ์ฝ์ e๋ฅผ ์ธ์๋ก ๋ฐ์
this.setState({
id: e.target.value, // console.log-> setState์ดํ๋ผ๊ณ ๋ค ์คํ๋๊ฒ์ ์๋๋ค. ๊ทธ๋์ render๋ฐ์์ console.log
});
};
handlePwInput = e => {
this.setState({
password: e.target.value,
});
};
render() {
const okayId = this.state.id.indexOf('@');
const okayPw = this.state.password.length > 5;
return (
<section className="login">
<h2 className="login-title">WESTAGRAM</h2>
<div className="input-container">
<div className="input-wrap">
<input
id="id"
type="text"
placeholder="์ ํ๋ฒํธ,์ฌ์ฉ์์ด๋ฆ ๋๋ ์ด๋ฉ์ผ"
onChange={this.handleIdInput}
/>
<input
id="password"
type="password"
placeholder="๋น๋ฐ๋ฒํธ"
onChange={this.handlePwInput} // ๋ณ์๋ฅผ ์ ์ธํ ๊ฒฝ์ฐ์๋ ์ธ์๋ฅผ ์ ์ธํด์ผ๋์ง๋ง, event์ onchange,
//onclick์์ฒด์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ธ์๊ฐ ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ ํ์ง ์์๋ ์๊ด ์๋ค.
/>
</div>
<button
className={
okayId !== -1 && okayPw
? 'changeButtonColor btn'
: 'normalButtonColor btn'
// css ํ์ผ๋ก ๋ค์ ์ ํ๊ธฐ.
//validation ? "able" : "disable"
}
onClick={this.submitLoginInfo}
disabled={!(okayId !== -1 && okayPw)}
>
๋ก๊ทธ์ธ
</button>
</div>
<div className="last">
<p>
<a href="/">๋น๋ฐ๋ฒํธ๋ฅผ ์์ผ์
จ๋์?</a>
</p>
</div>
</section>
);
}
}
export default LoginJihoo;
๐ state์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ ๊ด๋ฆฌํ๋ค.
๐ state์์ ์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ handleIdInput์์ setState๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ (event)๋ฅผ ์ฌ์ฉํด์ input๊ฐ์ ๋ฃ์ ์ ์๊ฒ ํจ์๋ฅผ ์งฐ๋ค.
๐ react๋ก ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ ๋ค์์ ๋ฐฑ์๋์ ํต์ ์ ํด์ ํ์๊ฐ์
/๋ก๊ทธ์ธ์ด ๋๋์ง ํ์ธํด๋ณด์๋ค.
๐ ๋ฐฑ์๋์ ํต์ ํ ๋๋ fetch๋ฅผ ์ฌ์ฉํด์ ์๋ฒ์ฃผ์๋ฅผ ๋ฐ์์ค๊ณ ํ๋ก ํธ์์๋ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ post๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
๐ ๊ทธ๋ฐ๋ค์ ํ์๊ฐ์
์ ํ ์ ์ ์ธ์ง ์๋์ง๋ฅผ ํ๋จํด์ ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ์ฑ๊ณตํด์ผ๋๊ธฐ ๋๋ฌธ์ token๊ฐ์ผ๋ก ํ์ธํ ์ ์๋ ๋ก์ง์ ์ง ๋ณด์๋ค.