React

React | ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ํ™œ์„ฑํ™”(React๋ฅผ ์ด์šฉํ•˜์—ฌ)

3jun 2022. 1. 13. 10:26

๐Ÿซ ์˜ค๋Š˜์˜ ๋ฏธ์…˜

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>
๋Œ“๊ธ€์ˆ˜0