본문 바로가기

패스트캠퍼스 챌린지 < 프론트엔드-react>

[패스트캠퍼스 수강후기] 프론트엔드 강의 60회차 미션

오늘도 41강 UI 컴포넌트 제작부분 17번째 클립부터 20번째 클립까지 들었다

17번째 클립은 어제에 이어서 로그인 폼부분에 만약 아이디가 틀렸으면

빨간 테두리를 표현할 수 있는 법에 대해서 배웠다

 

FORM 유효성 검사 마무리

<예시>

<app.vue>

<template>

  <div>

    <form v-on:submit.prevent="submitform">

      <div>

        <label for="username">ID: </label>

        <input id="username" type="text" v-model="username" 

          class="username-input error"

          v-bind:class= "{'error': isError }">//여기 추가

          //class="username-input"

          //v-bind:class= "{'error': false }"> //false면 이렇게  

          //class="username-input error"

          //v-bind:class= "{'error': true }">//여기 추가

      </div>

      <div>

         <lavel for="password">PW: </label>

         <input id="password" type="password" v-model="password">  

      </div>

      <button v-bin:disabled="!isUsernameValid" type="submit">로그인</button> //맞을때만 로그인버튼을 

    </form>                                                                                   클릭할 수 있게 되어잇음

    <p v-if="isError">올바르지 않은 ID입니다</p> //올바르지않은 아이디폼 #등을 입력하면 자동으로 뜸

    <p v-if="isUsernameValid">이메일 형식이 맞습니다</P>

  </div>

    

</template>

 

<script>

//이메일 형식 체크함수

function validateEmail(email) {

    const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

    return re.test(String(email).toLowerCase());

}

export default {

 data() {

     return {

         username: '',

         password: '',

         isError: false,

     };

 },

 computed:{

   isUsernameValid() {

     return validateEmail(this.username);

   }

 },

 methods: {

   submitForm(event) {

     //event.preventDefault();

     console.log('로그인';)

     //axios

     //  .post()

     //  .then()

     //  .catch(error => {

     //      this.isError = true;

     //  });

     this.isError = true;

     this.initForm(); 

   },

   initForm() { //로그인이 되면 지워짐

       this.username = '';

       this.password = '';

   }   

 }

};

 

</script>

 

<style scoped> //scoped 현재 컴포넌트에만 적용

 .usename-input {

     outline: none;

 }

 .username-input.error{

     border: 1px solid red;

 }

</style>

 

ToastPopup소개

또 다른 UI컴포넌트

(ex)지메일 앱에서 메세지를 보냈을 때 메세지를 보냈습니다 라고 뜨는 작은 알람메시지 같은 거

 

ToastPopup 컴포넌트 등록

npm run serve 쓰면 local host 8080 뜸

<예시>

<app.vue>

<template>

  <div>

    <form v-on:submit.prevent="submitform">

      <div>

        <label for="username">ID: </label>

        <input id="username" type="text" v-model="username" 

          class="username-input error"

          v-bind:class= "{'error': isError }">//여기 추가

          //class="username-input"

          //v-bind:class= "{'error': false }"> //false면 이렇게  

          //class="username-input error"

          //v-bind:class= "{'error': true }">//여기 추가

      </div>

      <div>

         <lavel for="password">PW: </label>

         <input id="password" type="password" v-model="password">  

      </div>

      <button v-bin:disabled="!isUsernameValid" type="submit">로그인</button> //맞을때만 로그인버튼을 

    </form>                                                                                   클릭할 수 있게 되어잇음

    <p v-if="isError">올바르지 않은 ID입니다</p> //올바르지않은 아이디폼 #등을 입력하면 자동으로 뜸

    <p v-if="isUsernameValid">이메일 형식이 맞습니다</P>

    <ToastPopup></ToastPopup> //대소문자 구분은 안함, toast-popup써도 인식은 함

  </div>

    

</template>

 

<script>

//vim치면 자동으로 import쓸 수 있는 명령어 생성

import ToastPopup from '@/components/toastpopup.vue';

//이메일 형식 체크함수

function validateEmail(email) {

    const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

    return re.test(String(email).toLowerCase());

}

export default {

 components: { /

    'ToastPopup': ToastPopup //문자열: 변수, 문자열에 ''생략가능, toastpopup만 써도 됨

 },

 data() {

     return {

         username: '',

         password: '',

         isError: false,

     };

 },

 computed:{

   isUsernameValid() {

     return validateEmail(this.username);

   }

 },

 methods: {

   submitForm(event) {

     //event.preventDefault();

     console.log('로그인';)

     axios. post();

     //axios

     //  .post()

     //  .then()

     //  .catch(error => {

     //      this.isError = true;

     //  });

     this.isError = true;

     this.initForm(); 

   },

   initForm() { //로그인이 되면 지워짐

       this.username = '';

       this.password = '';

   }   

 }

};

 

</script>

<style scoped> //scoped 현재 컴포넌트에만 적용

 .usename-input {

     outlinenone;

 }

 .username-input.error{

     border1px solid red;

 }

</style>

 

<toastpopup.vue>

//vue치면 기본생성

<template>

 <div>

   토스트 팝업    

 </div>  

</template>

 

<script>

export default {

 

}

</script>

 

<style>

 

</style>

 

ToastPopup 마크업 스타일링

<예시>

<크롬 개발자환경>

<!DOCTYPE html>

<html lang="en">

<head>...</head>

<body>

  <nonscript>...</nonscript> 

  <div data-v-7ba5bd90>

      <form data-v-7ba5bd90>...</form>

      <!---->

      <p data-v-7ba5bd90>이메일 형식이 맞습니다.</p>

      <div data-v-7ba5bd90 style="

         width: 200px;

         height: 50px;

         background-color: black;

         color: white;

         display: flex;

         justify-content: center;

         align-items: center;

         ">토스트팝업</div> == $0

  </div> 

  <!--built files will be auto injcected-->

  <script type="text/javascript" src="/js/chunk-vendors/js"></script>

  <script type="text/javascript" src="/js/app.js">

 </script>

</body>

</html>

 

<toastpopup.vue>

<template>

 <div class="toast">토스트 팝업</div>  

</template>

 

<script>

export default {

 

}

</script>

 

<style scoped> //현재 컴포넌트만

 .toast {

         width200px;

         height50px;

         background-colorblack;

         colorwhite;

         displayflex;

         justify-contentcenter;

         align-itemscenter;

         position: //왼쪽 아래에 넣으려면, 하지만 웹페이지에서 하면 더 좋음!

 }

</style>

 

<크롬 개발자환경>이부분 추가 

<div data-v-7ba5bd90 class="toast" style="

         position: fixed;

         bottom: 5%;

         left: 5%;

         ">토스트팝업</div> == $0

 

 

와 벌써 내일이면 종강이다!

 

https://bit.ly/3g7RJpi

 

프론트엔드 개발 올인원 패키지 with React Online. | 패스트캠퍼스

성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.

www.fastcampus.co.kr