반응형
아무것도 입력하지 않았을 때 발생하는 아래와 같은 현상을 막아보자
이를 위해서는 style을 동적으로 설정해야 한다
trim() 이라는 공백제거 메서드를 사용할 건데
inline style props는 값으로 객체를 가진다
<label style={{ color: !isValid ? 'red' : 'black' }}>Course Goal</label>
<input
style={{
borderColor: !isValid ? 'red' : 'black',
backgroundColor: !isValid ? 'salmon' : 'transparent'
}}
type="text" onChange={goalInputChangeHandler} />
이런 방식으로 조건에 맞지 않는 (예: 공백입력) 경우에 스타일을 변화하게 만들었다
하지만 항상 inline style에 최우선을 두기 때문에 css가 일순위가 되기 때문에 다른 style 속성들이 무시될 것이다
아래와 같이 setIsValid 값을 변경하고 return 해줌으로써 조건부 스타일링 완성
const formSubmitHandler = event => {
event.preventDefault();
if (enteredValue.trim().length === 0) {
setIsValid(false);
return;
} else {
setIsValid(true);
}
props.onAddGoal(enteredValue);
};
CourseInput.js
import React, { useState } from 'react';
import Button from '../../UI/Button/Button';
import './CourseInput.css';
const CourseInput = props => {
const [enteredValue, setEnteredValue] = useState('');
const [isValid, setIsValid] = useState(true);
const goalInputChangeHandler = event => {
setEnteredValue(event.target.value);
};
const formSubmitHandler = event => {
event.preventDefault();
if (enteredValue.trim().length === 0) {
setIsValid(false);
return;
} else {
setIsValid(true);
}
props.onAddGoal(enteredValue);
};
return (
<form onSubmit={formSubmitHandler}>
<div className="form-control">
<label style={{ color: !isValid ? 'red' : 'black' }}>Course Goal</label>
<input
style={{
borderColor: !isValid ? 'red' : 'black',
backgroundColor: !isValid ? 'salmon' : 'transparent'
}}
type="text" onChange={goalInputChangeHandler} />
</div>
<Button type="submit">Add Goal</Button>
</form>
);
};
export default CourseInput;
반응형
'온라인 강의 > React 완벽 가이드 [Udemy]' 카테고리의 다른 글
86. Styled Components 소개 (1) | 2023.06.06 |
---|---|
85. 동적으로 CSS 클래스 설정하기 (0) | 2023.06.05 |
83. 모듈 소개 [섹션 6: 리액트 컴포넌트 스타일링] (0) | 2023.06.05 |
82. 모듈 리소스 (0) | 2023.06.05 |
학습 확인: 목록(List) 출력하기 & 조건부 콘텐츠 (0) | 2023.06.05 |