ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฆฌ์กํธ ํ๋ก์ ํธ์ ์น ํฐํธ ์ ์ฉํ ๋ GlobalStyles์ ๋ฌธ์ ์
choi95 2021. 10. 24. 11:21๋ฌธ์
import {createGlobalStyle} from 'styled-components';
import reset from 'styled-reset';
const GlobalStyles = createGlobalStyle`
${reset};
( ... )
@import url('https://fonts.googleapis.com/css2?family=Lobster&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400&display=swap');
( ... )
}
`;
export default GlobalStyles;
์ดํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ ์คํ์ผ์์์ ๊ณตํต ์น ํฐํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด styled-components์ createGlobalStyle ๋ด์์ import๋ฌธ์ ํตํด ํฐํธ๋ฅผ ์ ์ฉํด์ฃผ์๋ค.
dev-server๋ฅผ ํตํด importํ ์น ํฐํธ๊ฐ ๋ฌธ์ ์์ด ์ ์ฉ๋จ์ ํ์ธํ์์ง๋ง, ์๋์ ๊ฐ์ Warning Message๊ฐ ์ฝ์ ์ฐฝ์์ ๊ณ์ ๋์๋ค.

์์ง๋ @import CSS ๊ตฌ๋ฌธ์ createGlobalStyle ์์์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๋ค๋ ๋ด์ฉ์ด์๋ค.
(๋ฒ๋ค๋ง production ๋จ๊ณ์์๋ CSSOM ๊ด๋ จ APIS๋ฅผ ์ ๋๋ก ์ปจํธ๋กคํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค)
์ด์ createGlobalStyle๋ฅผ ๋์ ํ์ฌ React helmet์ผ๋ก ๋ฆฌํฉํ ๋งํ๊ณ ์ ํ๋ค.
Refactor_helmet์ ํตํ ์น ํฐํธ ์ ์ญ ์ ์ฉ
https://www.npmjs.com/package/react-helmet
react-helmet
A document head manager for React
www.npmjs.com
This reusable React component will manage all of your changes to the document head.
react-helmet์ ์ฌ์ฉํ๋ฉด ๊ฐ ์ปดํฌ๋ํธ์ ํค๋ ๋ถ๋ถ์ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฉํ ์ ์๋ค.
์ด์ HelmetComponent๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๋ก ๋ถ๋ฆฝํด์ฃผ์ด, Root Component ์์์ importํ์ฌ ์ฌ์ฉํด์ฃผ์๋๋ ๋ฌธ์ ์์ด ์น ํฐํธ๋ฅผ ์ ์ญ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์๋ค.
import React, {Component} from 'react';
import {Helmet} from 'react-helmet';
class HelmetComponent extends Component {
render() {
return (
<Helmet>
<link rel="icon" href="./img/instagram.png"/>
<link rel="preconnect" href="https://fonts.googleapis.com"/>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/>
<link href="https://fonts.googleapis.com/css2?family=Lobster&display=swap" rel="stylesheet"/>
<link rel="preconnect" href="https://fonts.gstatic.com"/>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet"/>
<script src="https://kit.fontawesome.com/3090fba733.js" crossorigin="anonymous"/>
</Helmet>
)
}
}
export default HelmetComponent; //๋ณ๋ ์ปดํฌ๋ํธ๋ก ์์ฑ
( ... )
class App extends Component {
render() {
return (
<>
<HelmetComponent/> //Root Component์ ์ ์ฉ
<Router>
<Switch>
<Route exact path='/' component={Login}/>
<Route exact path='/main' component={Main}/>
</Switch>
</Router>
</>
)
}
}
export default App;
common style๋ก import
createGlobalStyle์ด๋ helmet์ ์ฌ์ฉํ์ง ์๊ณ ๋ค์๊ณผ ๊ฐ์ด common style์ ์ ์ญ์ ์ผ๋ก ์ ์ธํด์ฃผ์ด๋ ์น ํฐํธ๋ฅผ ํ๋ก์ ํธ ์์์ ๋๊ฐ์ด ์ฌ์ฉํ ์ ์์์ ํ์ธํ์๋ค.
@import url('https://fonts.googleapis.com/css2?family=Lobster&display=swap');
@import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css');
* {
box-sizing: border-box;
}
( ... )
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Type ๊ฐ์ ๋ฐ๋ผ ์กฐ๊ฑด๋ถ ๋๋๋ง_getDerivedStateFromProps (0) | 2021.11.07 |
---|---|
Carousel Slide ๊ธฐ๋ฅ Component๋ก ๋ถ๋ฆฝ (0) | 2021.11.07 |
๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ(how / what) (0) | 2021.10.28 |
๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ_JSX ์์์ Inline-style์ ๋ํด (0) | 2021.10.28 |
๋ฆฌ์กํธ ๋ฉ์๋ ๋ด this ๋ฐ์ธ๋ฉ ๋ฌธ์ (0) | 2021.10.24 |