2023. 11. 21. 11:17ㆍ프로젝트
현재 상황
위 화면은 현재까지 내가 구현한 학점 계산기 웹이다.
계산기의 과목명, 학점, 출석점수 등 모든 입력들은 Material UI의 TextField 컴포넌트를 사용하고 있다.
현재 계산기에는 학점을 정상적으로 계산하기 위해서 입력값에 대한 몇가지 유효 조건들이 존재한다.
(과목명 중복 불가, 학점의 최소, 최대 점수 등)
그리고 위 유효성들에 대한 검사 로직은 이미 구현 되어있고, 저장 버튼을 눌렀을 때 유효 조건을 만족하지 않으면 예외처리 후 Alert를 띄우고 문제의 TextField로 focus하는 것까지 마친 상태이다.
목표
이번 포스팅에서 구현하고자 하는 것은 저장 버튼을 누르기 전에도 사용자가 잘못된 값을 입력했다는 것을 인지할 수 있도록 TextField의 error 속성을 이용하여 TextField의 색상을 바꿔 시각적으로 알려주는 기능이다.
코드
error 속성을 추가하기 전
error 속성을 추가한 후
위 코드에서 error 속성안에는 삼항 연산자가 존재하는 것을 볼 수 있다.
삼항 연산자의 조건(과목명이 중복)이 참일 경우 error = true 로 설정되어 TextField에 빨간줄로 표시될 것이다.
이제 조건에 대한 설명을 하자면,
courses는 모든 과목들, 즉 모든 행이 담겨있는 배열이다. 그리고 course는 한 과목, 즉 한 행을 뜻하며 과목, 학점, 점수들에 대한 value들이 담겨있는 Object이다.
좀 더 이해하기 쉽도록 시각적으로 설명하자면 아래와 같다.
course1 = { name : "과목명1" , 학점 : 3, 출석점수 : 15, 과제점수 : 20, 중간고사 : 30, 기말고사 : 30};
course2 = { name : "과목명2" , 학점 : 2, 출석점수 : 10, 과제점수 : 20, 중간고사 : 20, 기말고사 : 30};
course3 = { name : "과목명3" , 학점 : 2, 출석점수 : 15, 과제점수 : 15, 중간고사 : 30, 기말고사 : 20};
course4 = { name : "과목명4" , 학점 : 3, 출석점수 : 20, 과제점수 : 20, 중간고사 : 15, 기말고사 : 30};
courses = [ course1, course2, course3, course4, ];
이제 조건문을 다시 살펴보면, courses 배열에 과목명들만을 추출하여 새로 배열을 만들고
그 배열에 현재 TextField에 입력한 과목명과 동일한 과목명의 개수가 1보다 크면 조건이 참이 되는 것을 볼 수 있다.
조건이 `>= 1`이 아닌 ` > 1`인 이유는
TextField의 onChange 함수로 과목명을 입력하는 즉시 해당 과목명이 배열에 포함되어 있도록 구현해놓았기 때문이다.
이제 나머지 학점, 출석점수, 과제점수, 중간고사, 기말고사 TextField들에도 각각의 조건과 함께 error 속성을 삼항 연산자로 설정해두면 아래와 같은 결과를 볼 수 있다.
결과물
학점 계산기 Git 주소
djLee77/GradeCalculator (github.com)
GitHub - djLee77/GradeCalculator
Contribute to djLee77/GradeCalculator development by creating an account on GitHub.
github.com
직접 사용해볼 수 있는 배포된 웹 페이지
https://djlee77.github.io/grade-calculator/
React App
djlee77.github.io
최근 레포지토리 이름 변경으로 인해 배포된 페이지의 url이 변경되어 일시적으로 404 에러가 발생했었고 현재 해결했습니다.
'프로젝트' 카테고리의 다른 글
SPA(Single Page Application) , Client-Side Routing (1) | 2024.06.12 |
---|---|
JWT(Json Web Token) 이해하기 (0) | 2024.05.16 |
[Web3] 프로젝트 프론트엔드 배포하기 netlify (0) | 2023.10.14 |