리액트에서는 동적으로 스타일 클래스를 추가하고 제거할 수 있다.
아래의 코드를 보면, input
태그에 값이 들어오지 않은 채로 제출을 누르면 invalid
라는 css클래스가 동적으로 추가되며 빨간색으로 input
과 label
태그를 바꿔준다.
그리고, 입력이 들어올 때마다, 공백인지 아닌지를 판단해 제대로된 값이 들어온다면 invalid
클래스를 제거해주도록해 원상복구 시키도록 한다.
아래의 코드를 통해 동적으로 특정 상황에 맞게 스타일을 쿼리스트링을 이용해 삽입하거나 제거할 수 있다는 사실을 알 수 있다.
const [isValid, setIsValid] = useState(true);
const goalInputChangeHandler = event => {
if (event.target.value.trim().length > 0) {
setIsValid(true);
}
setEnteredValue(event.target.value);
};
const formSubmitHandler = event => {
event.preventDefault();
if (enteredValue.trim().length === 0) {
setIsValid(false);
return;
}
};
<div className={`form-control ${!isValid ? 'invalid' : ''}`}>
.form-control.invalid input {
border-color: red;
background: #ffd7d7;
}
.form-control.invalid label {
color: red;
}
npm install --save styled-components
styled.button
은 신기하게도 새로운 button
을 반환하는 메서드이다.h1 h2 p a button
어떤 html 태그들을 포함하고 있다..button
과 같은 선택자가 필요없고, 적용되는 추가적인 동작은 &
을 붙이면 된다.import styled from 'styled-components';
const Button = styled.button`
font: inherit;
padding: 0.5rem 1.5rem;
border: 1px solid #8b005d;
color: white;
background: #8b005d;
box-shadow: 0 0 4px rgba(0, 0, 0, 0.26);
cursor: pointer;
&:focus {
outline: none;
}
&:hover,
&:active {
background: #ac0e77;
border-color: #ac0e77;
box-shadow: 0 0 8px rgba(0, 0, 0, 0.26);
}
`
props
를 넘길 수 있다. 생성된 Button
을 사용할 때, props
를 넘기고border: 1px solid ${props => (props.전달받은 인자 ? 'red' : 'blue')}
의 형태를 통해 동적으로 세부적인 css 요소에 접근할 수 있다.