컴포넌트 스타일링의 두 가지 접근 방식
npm install --save styled-components
일반적인 css를 사용할 경우
css-module을 이용하여 클래스명이 충돌하는 문제를 해결
컴포넌트명.module.css
로 파일명을 변경 후 사용하면빈값인지 확인하기
const formSubmitHandler = event => {
event.preventDefault()
if (enteredValue.trim().length === 0) {
setIsValid(false)
return
}
props.onAddGoal(enteredValue)
}
동적으로 CSS 클래스 설정
<div className="form-control">
<label style={{ color: !isValid ? 'red' : 'black' }}>Course Goal</label>
<input
style={{
borderColor: !isValid ? 'red' : '#ccc',
background: !isValid ? 'salmon' : 'transparent'
}}
type="text"
onChange={goalInputChangeHandler} />
</div>
<div className={`form-control ${!isValid ? 'invalid' : ''}`}>
<label>Course Goal</label> />
<input type="text" onChange={goalInputChangeHandler} />
</div>
스타일에
.form-control.invalid input {
border-color: red;
background: #ffd7d7;
}
.form-control.invalid label {
color: red;
}
스타일이 지정된 컴포넌트 및 동적 Props
const FormControl = styled.div`
& label {
color: ${props => (props.invalid ? 'red' : 'black')}
}
& input {
border: 1px solid ${props => (props.invalid ? 'red' : '#ccc')}
background: ${props => (props.invalid ? '#ffd7d7' : 'transparent')}
}
`
CSS 모듈을 사용한 동적 스타일
import styles from './CourseInput.module.css'
const CourseInput = props => {
(생략)
return (
<form onSubmit={formSubmitHandler}>
<div
className={`${styles['form-control']} ${!isValid && styles.invalid}`}
>
</div>
</form>
)
}