FE RYAN
완벽하지 않으면 어때
FE RYAN
전체 방문자
오늘
어제

블로그 메뉴

  • 💾 깃허브 링크
  • 홈
  • 태그
  • 분류 전체보기 (151)
    • 개인프로젝트 (8)
      • 개인 포트폴리오 웹앱 (6)
      • 프론트엔드 기술면접 아카이빙 웹앱 (2)
    • 기록 (121)
      • 원티드 프리온보딩 인턴십 (0)
      • 코드스테이츠 프론트엔드 (75)
      • 생각들 (3)
      • Today I learned (32)
      • 회고 (9)
      • 리뷰 (1)
    • 개발 (17)
      • React (3)
      • Javascript (7)
      • CSS (1)
      • HTML (3)
      • HTTP (1)
      • 자료구조 (0)
      • 알고리즘 (2)
    • 코딩테스트 (2)
      • 백준 (2)
      • 프로그래머스 (0)
    • 디자인 (1)
      • UI & UX (1)
    • 수학 (0)
    • 자기계발 (0)

공지사항

인기 글

태그

  • 원시타입
  • 신입개발자
  • seb39
  • seb 39
  • 리액트
  • 부트캠프
  • 프론트엔드
  • ES6
  • 자바스크립트
  • 회고
  • HTML
  • 자바스크립트 딥다이브
  • 코드스테이츠
  • 딥다이브
  • Til
  • 포트폴리오
  • css
  • useMemo
  • 메인프로젝트
  • 타입스크립트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
FE RYAN

완벽하지 않으면 어때

기록/코드스테이츠 프론트엔드

10주 4일차 - [React] Custom Component

2022. 7. 2. 14:04
728x90

10주 4일차 - [React] Custom Component

1. 배운 것

  • styled-component 기초, props 사용법
  • storybook 사용법
  • useRef 사용법, 필요한 상황
  • css - transition

2. 내용 정리

1. Styled Components 기본 사용법

  • jsx 문법을 사용하지 않으므로 import React from ‘react’; 는 필요 없음.
  • 개발자 도구로 styled-components로 생성한 컴포넌트의 클래스명을 보면 랜덤한 문자들의 나열로 된 걸 볼 수 있다. 따라서 클래스명이 겹칠 일이 없으므로 전역 css지만 스타일이 중첩될 일이 없다.
  • 가상 클래스는 &:hover {css 스타일링 작성} 이런 식으로 작성함.
  • 중첩되는 요소도 & 요소 {css 스타일링} 이렇게 작성함.
  • styled component의 클래스명은 해당 컴포넌트의 태그 안에 작성 가능은 하나 쓸 일 이 있을까?
  • props 사용 가능.

컴포넌트를 생성하면서 값으로는 styled 객체의 태그명과 동일한 이름의 메서드를 붙여 뒤에 태크드 템플릿 내부에 css 작성.

// 사용법

// 1. 패키지 설치
npm i styled-components

// 2. 사용할 파일 상단에서 import
import styled from 'styled-components';

// 3. 태그드 템플릿 내부에 스타일 작성
const FormControl = styled.div`
  margin: 0.5rem 0; 
  **& label** {
    font-weight: bold;
    display: block;
    margin-bottom: 0.5rem;
		**color: ${props => (props.invalid ? 'red' : 'black')};**
  }

  **& input** {
    display: block;
    width: 100%;
    **border: 1px solid ${props => (props.invalid ? 'red' : '#ccc')};
    background: ${props => (props.invalid ? '#ffd7d7' : 'transparent')};**
    font: inherit;
    line-height: 1.5rem;
    padding: 0 0.25rem;
  }

  **& input:focus** {
    outline: none;
    background: #fad0ec;
    border-color: #8b005d;
  }
`;

2. Styled Components & 동적 Props

기존 방식으로 동적으로 클래스명을 주는 경우

const CourseInput = props => {
  const [enteredValue, setEnteredValue] = useState('');
  const [isValid, setIsValid] = useState(true);
  const goalInputChangeHandler = event => {
    if (event.target.value.trim().length > 0) {
      setIsValid(true); // 입력값이 있으면 값이 유효한지의 state는 true.
    }
    setEnteredValue(event.target.value);
  };

  const formSubmitHandler = event => {
    event.preventDefault();
    if (enteredValue.trim().length === 0) {
      setIsValid(false);
      return;
    }

    props.onAddGoal(enteredValue);
  };

  return (
    <form onSubmit={formSubmitHandler}>
      <FormControl invalid={!isValid}>
        <label>Course Goal</label>
        <input type="text" onChange={goalInputChangeHandler} />
      </FormControl>
      {/* <div className="form-control">
     
      </div> */}
      <Button type="submit">Add Goal</Button>
    </form>
  );
};

2. Storybook

3. useRef

useRef는 값이 변경되어도 재렌더링이 일어나지 않는다.

useRef로 DOM을 선택할 수 있다고 VanliaJS 처럼 DOM 선택을 위한 용도로 사용해선 안된다.

  • 변수명.current 로 useRef의 값에 접근한다.

체크박스로 토글버튼 만들기

  • input 태그 type checkbox, 체크박스 input 태그와 연결된 label 태그, label 내부 span태그와 텍스트 3개 태그 사용.
  • 버튼 움직이는건 before나 after 가상클래스 활용.

참고 자료

  • 유데미 [한글자막] React 완벽 가이드 https://www.udemy.com/course/best-react/learn/lecture/28517627#overview
  • 벨로퍼트님 블로그 styled-components https://react.vlpt.us/styling/03-styled-components.html
  • 벨로퍼트님 블로그 useRef로 특정 DOM 선택하기 https://react.vlpt.us/basic/10-useRef.html
  • 리베하얀님 유튜브 체크박스로 토글버튼 만들기 https://www.youtube.com/watch?v=KVUy9i26kiI

3. 리뷰

3.1 좋았던 점

3.2 아쉬웠던 점

3.3 notes

티스토리 블로깅 시 노션에서 작성한 마크다운에서 한줄 코드블록, 하이퍼링크 구문이 제대로 안 불러와져서 불편하다.

728x90
저작자표시 비영리 변경금지 (새창열림)

'기록 > 코드스테이츠 프론트엔드' 카테고리의 다른 글

10주차 토요일 - 과제 리팩토링, new Map();  (0) 2022.07.03
10주 5일차 - react custom component 과제  (0) 2022.07.02
10주 3일차 - 피그마 2/ 알고리즘  (0) 2022.06.29
10주 1일차 - 휴가 사용(알고리즘 보충학습)  (0) 2022.06.27
9주 5일차 - JSON  (0) 2022.06.25
    '기록/코드스테이츠 프론트엔드' 카테고리의 다른 글
    • 10주차 토요일 - 과제 리팩토링, new Map();
    • 10주 5일차 - react custom component 과제
    • 10주 3일차 - 피그마 2/ 알고리즘
    • 10주 1일차 - 휴가 사용(알고리즘 보충학습)
    FE RYAN
    FE RYAN

    티스토리툴바