리액트 스타일 주입 방법은 다양하다.
정해진 답은 없다.
개인 프로젝트라면 자신이 편한 방식대로 사용하면 된다.
팀프로젝트라면 팀의 컨벤션에 따라 사용하면 된다.
태그 내에 스타일을 넣는 방법이다.
해당 태그에만 사용하는 스타일일 경우에만 사용하자.
// Header.js 파일
import React from "react";
const Header = () => {
return <div style={{ backgroundColor: "yellow" }}>헤더입니다.</div>;
};
export default Header;
기본적인 스타일 입력방법이다.
css를 사용하여 스타일을 적용하려면 프로젝트에 단일 css파일로 관리하는 것이 용이하다.
/* header.css 파일 */
.header {
background-color: yellow;
}
// Header.js 파일
import React from "react";
import "style/header.css";
const Header = () => {
return <div className="header">헤더입니다.</div>;
};
export default Header;
css의 확장판이다.
css 전처리기로써 다양한 기능을 제공한다.
yarn add node-sass
/* header.scss 파일 */
$headerColor: yellow;
.header {
background-color: $headerColor;
}
// Header.js 파일
import React from "react";
import "style/header.scss";
const Header = () => {
return <div className="header">헤더입니다.</div>;
};
export default Header;
css를 이용할 때 클래스명이 충돌하는 경우가 발생하는데 그것을 방지한다.
scss도 사용가능하다.
/* Header.module.css 파일 */
.Header {
background-color: yellow;
}
// Header.js 파일
import React from "react";
import HeaderStyle from "styles/Header.module.css";
const Header = () => {
return <div className={`${HeaderStyle.Header}`}>헤더입니다.</div>;
};
export default Header;
css 라이브러리로서 많이 사용된다.
yarn add styled-components
// Header.js 파일
import React from "react";
import styled from "styled-components";
const StyledDiv = styled.div`
background-color: yellow;
`;
// 다른 사용법
// const StyledDiv = styled("div")`
// background-color: yellow;
// `;
const Header = () => {
return <StyledDiv>헤더입니다.</StyledDiv>;
};
export default Header;
타입힌트와 IDE의 자동완성을 이용해서 스타일 오브젝트를 만든다.
// Header.js 파일
import React from "react";
/** @type {React.CSSProperties} */
const headerSytle = {
backgroundColor: "yellow",
};
const Header = () => {
return <div style={headerSytle}>헤더입니다.</div>;
};
export default Header;
// HeaderStyle.js
/** @type {React.CSSProperties} */
const HeaderSytle = {
backgroundColor: "yellow",
};
export default HeaderSytle;
// Header.js 파일
import React from "react";
import HeaderSytle from "styles/HeaderStyle";
const Header = () => {
return <div style={HeaderSytle}>헤더입니다.</div>;
};
export default Header;
// HeaderStyle.js
/** @type { (color: string) => React.CSSProperties } */
const HeaderSytle = (color) => {
return {
backgroundColor: color,
};
};
// Header.js 파일
import React from "react";
import HeaderSytle from "styles/HeaderStyle";
const Header = () => {
return <div style={HeaderSytle("yellow")}>헤더입니다.</div>;
};
export default Header;
styled Components
https://velog.io/@qksud14/portfolio-05
SCSS @mixin 과 @include
https://hello-bryan.tistory.com/116
SCSS @extend 와 Inheritance
https://hello-bryan.tistory.com/117
module.css 클래스명 충돌방지
https://velog.io/@kwonh/React-CSS%EB%A5%BC-%EC%9E%91%EC%84%B1%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EB%93%A4-css-module-sass-css-in-js