반응형

props 란?

properties의 약자로 컴포넌트를 사용하게 될때 특정 값을 전달하고 싶을때 사용한다.이를 통해 React 애플리케이션은 데이터의 단방향 흐름을 유지하면서 구조화된 방식으로 컴포넌트를 조합 할수 있다.

 

예제를 통해 설명하겠다

// ToDoList.js
import React from 'react';
import ToDoItem from './ToDoItem';

const ToDoList = () => {
  // 할일 목록 데이터
  const toDos = [
    { id: 1, text: 'React 공부하기' },
    { id: 2, text: '컴포넌트 만들기' },
    { id: 3, text: 'props 사용하기' }
  ];

  return (
    <div>
      <h2>To Do List</h2>
      <ul>
        {toDos.map(todo => (
          // ToDoItem 컴포넌트에 props로 데이터를 전달
          <ToDoItem key={todo.id} text={todo.text} />
        ))}
      </ul>
    </div>
  );
};

export default ToDoList;

 

import React from 'react';

const ToDoItem = (props) => {
  return (
    <li>{props.text}</li>
  );
};

export default ToDoItem;

 

 

ToDoList 컴포넌트는 toDos 배열을 가지고 있다. 이 배열은 할일 항목을 나타내고 map 함수를 사용하여 각 할일 항목에 대해 ToDoItem 컴포넌트를 생성하고, ToDoItem 컴포넌트에는 text라는 prop을 전달한다.

ToDoItem 컴포넌트에서는 props를 매개변수로 받아와서 해당 prop을 사용하여 할일 항목의 텍스트를 렌더링한다.

위같은 방법으로 부모 컴포넌트인 ToDoList가 할일 목록 데이터를 갖고 있고, 이 데이터를 props로 전달하여 자식 컴포넌트인 ToDoItem이 화면에 각각의 할일 항목을 렌더링한다.

 

 

만약 비구조화 할당을 통해 props의 text를 전달 받기를 원한다면 아래와 같이 사용하면 된다.

실제로 비구조화 할당을 사용하여 값을 가져오는경우가 더 많다.

import React from 'react';

const ToDoItem = ({text}) => {
  return (
    <li>{text}</li>
  );
};

export default ToDoItem;

 

반응형
반응형

 

useState를 설명하기에 앞서 먼저 Hook에 대해서 설명하겠다.

React 공식문서에서 아래와같은 내용을 확인 할 수 있다.

더보기

Hook은 React 16.8버전에 새로 추가되었습니다. Hook은 클래스 컴포넌트를 작성하지 않아도 state와 같은 특징들을 사용할 수 있습니다.

Hook은 props, state, context, refs, 그리고 lifecycle와 같은 React 개념에 좀 더 직관적인 API를 제공합니다.

위의 내용처럼 useState는 Hook API 중 하나이고 React 16.8 이상에서 사용할 수 있으며  Class안에서는 동작하지 않는다.이 점을 꼭 유의해서 사용하도록 하자.

 


 

 

이제 본격적으로 useState에 대해서 설명하겠다.

useState는 함수형 컴포넌트에서 상태(state)를 관리하기 위해 사용되고 이를 이용해 상태를 추가하고 해당 상태를 업데이트할 수 있다.

 

 

useState 사용법

useState를 사용하기 위해선 우선 import 하고 상태를 선언하고 해당 상태와 해당 상태를 업데이트할 함수를 가져와야 한다. 아래의 예제를 보자.

import React, { useState } from 'react';

function Example() {
  // useState를 사용하여 count 상태와 setCount 함수를 선언
  const [count, setCount] = useState(0);

  // count를 업데이트하는 함수
  const incrementCount = () => {
    setCount(count + 1);
  };

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={incrementCount}>Increase Count</button>
    </div>
  );
}

export default Example;

useState(0)은 초기값이 0인 count라는 상태를 생성한다. setCount는 count 상태를 업데이트하는 함수다. 이 함수를 호출하면 리액트는 컴포넌트를 다시 렌더링한다.

incrementCount 함수는 버튼을 클릭할 때마다 count 상태를 증가시키는 역할을 한다. 이 함수는 setCount를 호출하여 count 상태를 이전 값에서 1씩 증가시킨다.

useState 훅은 단일 상태 뿐만 아니라 객체나 배열과 같은 복잡한 데이터 구조를 관리할 수도 있다. 이를 통해 여러 개의 상태를 한 번에 처리할 수 있다. 이러한 방식으로, 함수형 컴포넌트에서도 상태를 효과적으로 관리할 수 있다

 

useState의 대괄호는 무슨 역할인가?

const [fruit, setFruit] = useState('banana');

대괄호 안의 내용을 기본값이다. 'setFruit'로 값을 넣지 않는이상 'fruit'는 'banana' 인 것이다.

 

 

객체도 가능한가?

const [userList,setUserList] = useState({
	username : 'Hong gil dong',
  	email : 'gildong00@example.com'
})

위와 같은 형태로도 사용이 가능하며 모든 속성을 업데이트 해야 할때 유용하다. 사용할때는 조금 편리하게 하기 위해 아래처럼 구조분해 할당을 하면된다.

const [userList,setUserList] = useState({
	username : 'Hong gil dong',
  	email : 'gildong00@example.com'
})

const [username,email] = userList;

 

 

 


 

 

위처럼 useState기능이 추가되고서 함수형 컴포넌트를 사용하던 중 state를 추가하고 싶을 때 클래스 컴포넌트로 바꿔야 할일은 사라졌고 함수형 컴포넌트 안에서 useState를 활용하여 추가 및 관리 할 수 있게 됐다.

 

useState의 좀더 본격적인 활용과 Hook 규칙에 대해서는 useEffect를 하며 좀더 자세하게 설명하겠다. 

 

 

 

모르겠으면 아래의 React 공식 문서를 꼭 보자.

https://react.dev/reference/react/useState

반응형
반응형

 

 

React에서의 조건부 렌더링이란?

조건부 렌더링은 어떤 조건에 따라 다른 컴포넌트나 요소를 렌더링하는 것을 의미한다. 

 

 

React 에서의 조건부 렌더링은 보통 삼항연사자를 이용해서 구현된다. 아래의 예제를 보자

import React from 'react';

function App ({ isLoggedIn }) {
  return (
    <div>
      {isLoggedIn ? (
        <p>Welcome, user!</p>
      ) : (
        <p>Please log in</p>
      )}
    </div>
  );
}

export default App;

isLoggedIntrue이면 "Welcome, user!"가 출력되고, false이면 "Please log in"이 출력되는 간단한 예제이다.

 

여러 조건이 필요한 경우는 아래처럼 &&을 이용하여 나타낼수도 있다.

import React from 'react';

function App({ isLoggedIn, isAdmin }) {
  return (
    <div>
      {isLoggedIn && isAdmin ? (
        <p>Welcome, admin user!</p>
      ) : isLoggedIn ? (
        <p>Welcome, regular user!</p>
      ) : (
        <p>Please log in</p>
      )}
    </div>
  );
}

export default App;

isLoggedInisAdmin을 사용하여 조건에 따라 서로 다른 메세지를 출력하는 예제이다.

 

 

 

위의 예제는 삼항연산자를 사용했지만 if 문 등을 이용해서 여러 조건에 따라 다른 UI를 렌더링하기 위해 사용 할 수 있으니 많이 만들어보고 익히도록 하자.

반응형
반응형

꽤 많은 개발자들이 기초가 단단하지 않은 상태에서 새로운것을 학습하며 곁가지를 넓혀간다.

그러면서 밑바닥이 드러나고 직업에 대해 다시 생각해보며 회의감을 느낀다. 그리고 새로운것을 거부한다.

 

이러한 두려움을 없애기위해 다시 기초를 다지려한다.

React 의 기본 문법부터 활용 그에 따른 예시를 함께 올릴 예정이다. 아래의 링크들은 계속 업데이트 될꺼고 해당 내용을 참고하면 된다.

 

 

2024.03.31 - [Develop/React] - [React] Props 란 무엇인가 ? 사용방법은?

반응형
반응형

회사에서 git을 사용하지 않으니 이게 뭔가 한참을 헤맸다.

그래서 정리한다 다른 사람들은 조금 덜고생하라고..

 


SubModule이란?

: Git 저장소 안에 다른 Git 저장소를 디렉토리로 분리해 넣는 것으로 git의 다른 레파지토리를 참조할때 쓰는 형태

 

예를 들어 다른 프로젝트를 함께 사용해야 하는 경우 서로 별개로 다루면서도 그 중 하나를 다른 하나 안에서 사용할 수 있어야 할때 사용하는데 보통 라이러리 개발하고 가져다 쓸때, 다른 프로젝트의 직접 코드를 끌어와서 쓸때 등등 다양한 이유로 사용이 가능하다. 

 

 

사용방법

나는 아래의 내용을 가져다 쓰는 예시를 보여주겠다.

https://github.com/chafey/openjphjs

 

GitHub - chafey/openjphjs: OpenJPH wrapper for medical imaging

OpenJPH wrapper for medical imaging. Contribute to chafey/openjphjs development by creating an account on GitHub.

github.com

 

 

먼저 추가하고자하는 레포지토리로 가서 아래의 사진처럼 web url을 가져온다. 

 

 

아래 명령어를 사용하여 서브모듈을 추가한다.

git submodule add https://github.com/chafey/openjphjs.git

 서브모듈을 프로젝트에 포함하는 명령어로 나중에 다른 레포지토리가 필요할때 아래처럼 add 해주면 된다.

 

 

아래 명령어를 사용하여 서브모듈을 초기화한다. 

git submodule update --init --recursive

모르겠으면 서브모듈의 소스코드를 프로젝트로 가져오는 명령어라고 생각하면 된다.

  1. update: 저장소의 상태를 최신 버전으로 업데이트한다. 서브모듈의 커밋을 최신 커밋으로 변경하는 것을 의미.
  2. --init: 서브모듈을 초기화.이 단계에서는 .gitmodules 파일에 등록된 서브모듈의 정보를 읽어와 관련 설정을 초기화
  3. --recursive: 서브모듈 내에 또 다른 서브모듈이 있는 경우, 이를 모두 업데이트하고 초기화한다.

ChatGpt한테 물어보니까 이렇다는데 결론은  git submodule init 명령을 실행하면 서브모듈 정보를 기반으로 로컬 환경설정 파일이 준비되고 이후 git submodule update 명령으로 서브모듈의 리모트 저장소에서 데이터를 가져오고 서브모듈을 포함한 프로젝트의 현재 스냅샷에서 Checkout 해야 할 커밋 정보를 가져와서 서브모듈 프로젝트에 대한 Checkout을 함

 

 

git submodule 명령어와 관련된 주요 옵션

  1. add: 새로운 서브모듈을 추가
    • git submodule add <URL> [<path>]: 주어진 URL에서 서브모듈을 가져와 <path> 위치에 추가
  2. init: 저장소에 있는 서브모듈을 초기화
    • git submodule init: .gitmodules 파일에 있는 서브모듈을 확인하고 초기화
  3. update: 서브모듈을 업데이트
    • git submodule update [--init] [--recursive] [<path>]: 주어진 서브모듈을 업데이트
      • --init: 서브모듈을 초기화합니다.
      • --recursive: 서브모듈 내의 서브모듈도 재귀적으로 업데이트
  4. status: 서브모듈의 상태를 확인
    • git submodule status [<path>]: 서브모듈의 현재 상태를 보여줌
  5. sync: 서브모듈을 부모 저장소와 동기화
    • git submodule sync [<path>]: 서브모듈을 부모 저장소와 동기화
  6. foreach: 각 서브모듈에 대해 지정된 명령을 실행
    • git submodule foreach <command>: 각 서브모듈에 대해 <command>를 실행
  7. summary: 서브모듈 요약 정보를 표시
    • git submodule summary [<path>]: 서브모듈의 요약 정보를 표시
  8. deinit: 서브모듈을 해제
    • git submodule deinit [-f | --force] <path>: 주어진 서브모듈을 해제
  9. absorbgitdirs: 서브모듈 내부의 .git 디렉토리를 부모 저장소로 흡수
    • git submodule absorbgitdirs <path>: 서브모듈 내부의 .git 디렉토리를 부모 저장소로 흡수
  10. update-index: 서브모듈을 포함하는 상위 저장소의 인덱스를 업데이트
    • git update-index [--cacheinfo | --index-info] [--add | --remove | --replace | --skip-worktree | --no-skip-worktree | --intent-to-add] [--chmod=(+|-)x] [--force-remove] [--refresh] [--really-refresh] [--unresolve | --resolve | --unresolve-unmerged] [--again] [--info-only] [--ignore-missing] [--] [<file>]: 서브모듈을 포함하는 상위 저장소의 인덱스를 업데이트

 

 

 

[참고]

https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-%EC%84%9C%EB%B8%8C%EB%AA%A8%EB%93%88

반응형
반응형

Streaming에 대해 설명하기에 앞서 Web worker에 대해서 설명 드리겠습니다.

Web worker란?

: Web Worker는 웹 애플리케이션의 기본 실행 스레드와 별도로 백그라운드 스레드에서 스크립트 작업을 실행할 수 있 도와주는 기능

 

이러면 메인 스레드와 분리해서 힘든 처리를 별도의 스레드에서 수행할 수 있어 메인 스레드가 차단되거나 느려지지 않고 실행될 수 있다.카카오 테크에서 누구든 알아보기 쉽게 잘 이미지를 만들었는데 아래를 보면 더 이해가 팍! 된다.   

javascript는 싱글 스레드 런타임을 갖기때문에 데이터를 처리하는 무거운 동작이 추가된다면 병목현상이 발생하고 렌더링에 영향을 미쳐 사용자 경험을 해친다. 이를 방지하기 위해 사용하는게 web worker다.

 

 

예를 들어 어디에 사용하는가?

음... 내가 생각하기에는 Figma가 web worker를 사용했을꺼다. 이유를 크게 3가지이다.

  1. 복잡한 그래픽 처리 및 계산: Figma는 그래픽 디자인 도구이므로, 복잡한 그래픽 처리와 계산이 필요. 웹 워커를 사용하여 이러한 작업을 백그라운드에서 처리함으로써 메인 스레드의 성능을 유지하고 사용자의 작업 흐름을 방해안함
  2. 다중 작업 처리: Figma는 동시에 여러 작업을 수행해야 할 수 있다. 웹 워커를 사용하면 각 작업을 별도의 스레드에서 처리하여 효율적으로 관리
  3. 반응성 및 성능 향상: 웹 워커를 사용하여 메인 스레드에서의 작업을 분산시키면, 사용자 인터랙션에 더 반응적이고 부드러운 사용자 경험을 제공

 

사용방법

위의 이미지처럼 Main Thread와 Worker는 서로 메세지를 통해 데이터를 주고 받는다

 

 

[출처]

https://tech.kakao.com/2021/09/02/web-worker/

 

브라우저 Web Worker 다루기 with 오피스 문서 텍스트 추출 및 암호해제

안녕하세요. 톡플랫폼개발팀 bishop.cho입니다. 현재 메일클라개발셀에서 프론트엔드 업무 개발을 담당하고 있습니다. 기존에는 자바스크립트로 동작하는 오피스 에디터 및 뷰어 개발을 했던 경

tech.kakao.com

https://medium.com/hcleedev/web-web-worker-%EC%82%AC%EC%9A%A9%EB%B2%95%EA%B3%BC-%EC%A3%BC%EC%9D%98%ED%95%A0-%EC%A0%90-webpack-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%AC%B8%EC%A0%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%AA%A8%ED%82%B9-2d77c5b23afe

반응형

+ Recent posts