본문 바로가기
STUDY/멋쟁이사자처럼

jsx (2)

by IT것저것 2022. 8. 9.

Inline Style

html에서 태그 안에서 스타일 속성을 추가한 것과 같다

 

아주 작은 차이점이 있는데 제일 먼저 style 속성에 들어가는 값은 객체 형태여야 한다

그리고 css 속성 이름이 camel case로 작성되어 있다는 차이점이 있다

모든 하이픈을 빼고 하이픈 뒤 문자를 대문자로 바꾸면 된다

 

* Camel Case : 단어가 합쳐진 부분마다 맨 처음 글자를 대문자로 표기하는 방법

두 개 이상의 단어가 모인 합성어에서 사용됨

 

터미널에서 

yarn start

를 타이핑하면 됨

 

그런데 같은 스타일의 태그가 늘어나면 코드 재사용성이 떨어진다

그래서 스타일 값에 들어갈 객체를 미리 선언하여 사용할 수 있다 

 

이렇게 인라인 스타일을 할 수 있고

기존의 css 파일의 별도로 작성해서 적용하는 방식도 사용할 수 있다 

 

css 파일을 작성해보자

  
.red {
    background-color: red;
    color: beige;
    font-size: 48px;
    padding: 16px;
}
// red라는 클래스를 작성해보겠다

이것을 적용하려면 html 상단에서 css를 불러와줘야 한다

적용을 원하는 div에 class 속성을 입력해주면 된다

html에서는 class이라고 입력하려면 "className"으로 입력해주면 된다

 

react 16 ver. 이전에서는 class로 작성하면 에러가 났고 이제는 class를 "className"으로 자동변환해줘서 실행은 되지만 console창에 경고가 출력된다

 

css파일을 작성하는 방법에 대해 알아보았다 

 

 마지막으로 styled components에 대해 알아보겠다

styled components는 개발자들이 선호하는 css인 js 라이브러리 중 하나이다

 

자바스크립트 내에서 스타일링을 돕는 라이브러리인데 앞에서 인라인 스타일링은 camel case로 작성해야하는 등의 차이가 있었다

 

styled components를 사용하면 js에서 css를 그대로 사용할 수 있게 된다

이 라이브러리를 사용하기 위해서는 먼저 설치를 해주어야 한다

 

터미널을 열어서 

yarn add styled-components

설치하면 package.json의 styled-components가 추가된 것을 볼 수 있다

 

Styled components를 사용하려면 상단에 설치할 라이브러리를 불러와준다

 

styled componets를 계속 반복하기 귀찮으니 줄여서 styled라고 한다

 

말그대로 스타일링된 componet를 만들 수 있다 

 

리액트에서 componet 이름은 대문자로 시작해야 한다

 

styledButton = styled.button`

백틱 사용 

styled 함수가 styled.button 이 함수가 반환해서 styled button에 저장되는 것은 react componets이다 

button 형태의 react components를 받아와서 custome한다는 의미로 이해하면 됨

 

그래서 jsx 내에서 자유롭게 사용할 수 있다 

<StyledButton> 이렇게 만들 수 있다

 

브라우저에서 이 소스가 어떻게 동작하는 지 확인해보면 styled 버튼은 기본 버튼을 상속받아 스타일을 입힌 것이다

그래서 button 태그로 들어가 있고 styled componets 라이브러리가 자동으로 생성하는 class로 지정되어 있는 걸 볼 수 있다 

`


JSX 실습

 

실습 목표 정리

 

Dark Mode

: Dark Mode 와 Light Mode 조건부 렌더링 UI를 구현한다

 

Loading

Loading True : 로딩중일 경우 로딩 이미지를 표시한다

Loading False : 게시글을 표시한다

Loading False && No Post : 로딩은 끝났지만 표시 할 포스트가 없을 경우 없다는 문구를 띄워준다

 

실습 파일 다운로드

 

[기존 파일 대체] *src 폴더 내의 기존 파일을 삭제하고 넣으세요!

App.jsx - 기존의 App.js 파일을 대처한다

index.css - 기존의 index.css 파일을 대체한다

 

[새로운 파일] * 새로운 파일이므로 그냥 src폴더 내에 넣으세요!

styledComponents.js - 실습에 사용할 디자인된 컴포넌트들을 생성해둔 파일

index.css - 전역에 적용된 CSS 파일

loading.svg - 로딩 아이콘 SVG 파일

 

loading.svg는 로딩할 때 사용할 svg 파일

index.css를 보면 @import가 되어있고 url이 되어 있다 이것은 구글 웹폰트를 이용한 것이다

웹서비스에서 사용되는 폰트를 사용자들의 로컬 환경에 일일이 설치하면 비효율이다

구글 웹 폰트를 사용하면 온라인 환경을 통해 설치 없이 폰트를 로드할 수 있다

https://fonts.google.com/

구글 웹 폰트 사이트에서 원하는 폰트들을 검색한다

Regular 400을 눌르면 장바구니처럼 담긴다

css 파일 내에서 import 할거라서 import를 클릭해서보면 입력해야 할 코드가 작성되어 있다

 

이번 실습에서 사용해야할 폰트는  

"black han sans" "noto sans korean" "league" 이걸 import를 하면 css에서 폰트 속성을 바로 줄 수 있다

다른 스타일링하기 앞서 

이렇게 작성해둬야 한다

 

다음으로

styledComponents.js인데 우리가 학습했던 styledcomponets 라이브러리를 사용하여 이번 실습에 사용할 우수한 컴포넌트를 미리 작성하고  스타일링한 걸 볼 수 있다

 

다음은 styles.js인데 

import { createGlobalStyle } from "styled-components";
export const GlobalStyles = createGlobalStyle`
    ${reset}
`;

두 개가 import 되어 있다

 

createGlobalStyle은 이름처럼 전역에 일관성 있는 스타일링을 적용해주는 것 
 
styled-reset은 브라우저의 기본 디자인 , 기본 여백 등을 없애주는 것이다
 

그래서 정리하면 Globalstyle로 지정된 전역에 브라우저 기본 디자인을 무시하는 코드다 

 

또한 이 파일은 우리가 다크모드를 구현하면서 사용할  lightTheme, darkTheme 스타일링을 작성할 뿐이다

style-reset은 라이브러리를 설치해줘야한다

 

yarn add styled-reset

 

그 다음으론 app.jsx으로 넘어간다

styledcomponent파일에 작성한 코드들이 모두 import되어있는 것을 볼 수 있다

 그리고 그 아래로 fortawesome 라이브러리에서 다양한 아이콘들이 import되어 있다

이 아이콘을 사용하려면 또 설치해야한다

yarn add @fortawesome/free-solid-svg-icons @fortawesome/react-fontawesome @fortawesome/fontawesome-svg-core @fortawesome/free-brands-svg-icons

아직은 아무것도 안뜨는 것이 맞다

 

이제 뼈대를 작성해보자

로고가 생겼다

ul 태그로 목록을 만들어줄 것이다

styles.js에서 Globalstyles에 reset를 적용해서 브라우저의 기본 디자인과 여백을 무시하는 코드가 작성되어있었다

그것을 사용해준다

최상단에 닫힌 태그로 작성해주면 된다

사용하려면 import해줘야 한다

 

저장하면 여백이 사라진다

 

다크모드 버튼 만들기

다크모드일 경우와 아닐 경우의 변수를 먼저 하나 선언해준다

 

삼항연산자를 사용하여 다크모드인지 아닌지 

버튼이니까 on off로 바꿔줄 수 있다

 

글자보다는 아이콘이 직관적인 것 같아서 해와 달 아이콘 모양으로 바꿔보겠다

로딩을 구현해보자

로딩중인 상태를 구분하는 로딩 변수를 만들어주고 

 

삼항연산자를 이용해서 로딩중일 경우에는 로딩중이다라는 말에 false일 경우에는 로딩 끝이라는 말을 띄어준다

로딩이 끝났을 때 아래 ul 태그를 보여준다

ul 태그를 로딩 끝 부분에 넣어준다

그리고 로딩중일 때는 로딩 이미지를 띄어주겠다

상단에서 loading 아이콘

import loadingIcon from './loading.svg';

src에 입력을 해준다

 

게시글이 없다면 게시글이 없다고 띄울 것이다

포스트가 있는 지를 구분해줄 변수 ispost를 만든다

const isPost = true;

그리고 또 삼항 연산자를 작성해주고 ul 태그를 또 올려준다

true일경우 아직 기록된 글이 없다고 적는다

저 문구는 loding div로 감싸줄것이다

그러면 디자인되어 들어감

<LoadingDiv>아직 기록된 글이 없습니다. </LoadingDiv>

'STUDY > 멋쟁이사자처럼' 카테고리의 다른 글

JS를 통해 DATA fetch하는 웹 만들기  (0) 2022.08.17
REACT (3)  (0) 2022.08.17
REACT (2)  (0) 2022.08.11
JSX  (0) 2022.08.08
REACT (1)  (0) 2022.08.08