AI가 정리해준 리액트
2023. 3. 28. 10:35ㆍ개발/토막난 상식
반응형
- 리액트란 무엇인가요?
- 리액트(React)는 페이스북에서 개발한 자바스크립트 라이브러리입니다.
- 사용자 인터페이스(UI)를 만들기 위한 라이브러리로, 컴포넌트 기반으로 동작합니다.
- 가상 돔(Virtual DOM)을 사용하여 성능을 최적화하고, 단방향 데이터 흐름을 따르는 특징이 있습니다.
- 리액트의 컴포넌트란 무엇인가요?
- 리액트에서 UI를 구성하는 기본 단위입니다.
- 컴포넌트는 독립적이고 재사용 가능하며, 다른 컴포넌트와 조합하여 사용할 수 있습니다.
- 함수형 컴포넌트와 클래스형 컴포넌트로 구성됩니다.
- JSX란 무엇인가요?
- JSX는 자바스크립트와 HTML을 혼합한 문법으로, 리액트에서 컴포넌트를 만들 때 사용됩니다.
- JSX는 브라우저에서 직접 실행되지 않으며, 바벨(Babel)과 같은 트랜스파일러를 사용하여 자바스크립트로 변환됩니다.
- 상태(State)와 속성(Props)의 차이점은 무엇인가요?
- 상태는 컴포넌트 내에서 변경될 수 있는 값으로, 컴포넌트 내부에서 관리됩니다.
- 속성은 부모 컴포넌트로부터 전달되는 값으로, 컴포넌트 내부에서 변경할 수 없습니다.
- 리액트에서 상태를 관리하는 방법은 무엇인가요?
- 클래스형 컴포넌트에서는 state 객체를 사용하여 상태를 관리합니다.
- 함수형 컴포넌트에서는 useState 훅을 사용하여 상태를 관리합니다.
- 리액트에서 이벤트 처리하는 방법은 무엇인가요?
- 이벤트 처리는 onClick, onChange 등의 이벤트 핸들러를 등록하여 처리합니다.
- 클래스형 컴포넌트에서는 이벤트 핸들러를 메서드로 정의하고, 함수형 컴포넌트에서는 이벤트 핸들러를 콜백 함수로 전달합니다.
- 리액트에서 조건부 렌더링을 하려면 어떻게 해야 하나요?
- 조건부 렌더링은 특정 조건에 따라 다른 결과를 보여주는 것을 말합니다.
- if문이나 삼항 연산자, && 연산자를 사용하여 조건부 렌더링을 구현할 수 있습니다.
- 예를 들어, 다음과 같은 코드는 isLoggedIn이 true일 때 "로그인 되었습니다"를, false일 때 "로그인이 필요합니다"를 출력합니다.
function Greeting(props) {
const isLoggedIn = props.isLoggedIn;
if (isLoggedIn) {
return <h1>로그인 되었습니다</h1>;
}
return <h1>로그인이 필요합니다</h1>;
}
- 리액트에서 반복문을 사용하는 방법은 무엇인가요?
- 반복문은 map() 함수를 사용하여 구현할 수 있습니다.
- 예를 들어, 다음과 같은 코드는 numbers 배열을 반복하면서 각 항목을 제곱하여 새로운 배열을 생성합니다.
const numbers = [1, 2, 3, 4, 5];
const squaredNumbers = numbers.map((number) => number * number);
console.log(squaredNumbers); // [1, 4, 9, 16, 25]
- 이렇게 생성된 배열을 JSX에서 사용할 때는 중괄호({})로 감싸서 출력합니다.
- 리액트에서 스타일을 적용하는 방법은 무엇인가요?
- 스타일을 적용할 때는 인라인 스타일, CSS 모듈, styled-components 등의 방법을 사용할 수 있습니다.
- 인라인 스타일은 객체 형태로 스타일을 정의하여 JSX 요소의 style 속성에 전달합니다.
- CSS 모듈은 CSS 파일을 모듈화하여 클래스 이름을 자동으로 생성하고, JSX 요소의 className 속성에 해당 클래스 이름을 전달하여 스타일을 적용합니다.
- styled-components는 JS 파일에서 CSS를 작성하여 컴포넌트와 함께 사용할 수 있도록 해줍니다.
- 리액트에서 라우팅을 구현하는 방법은 무엇인가요?
- 라우팅은 URL 경로에 따라 다른 컴포넌트를 렌더링하는 것을 말합니다.
- 리액트에서 라우팅을 구현할 때는 react-router-dom 라이브러리를 사용합니다.
- BrowserRouter, Route, Link 등의 컴포넌트를 사용하여 라우팅을 구현할 수 있습니다.
- 예를 들어, 다음과 같은 코드는 "/" 경로로 접근할 때 Home 컴포넌트를, "/about" 경로로 접근할 때 About 컴포넌트를 렌더링합니다.
import { BrowserRouter, Route, Link } from "react-router-dom";
function App() {
return (
<BrowserRouter>
<nav>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/about">About</Link>
</li>
</ul>
</nav>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
</BrowserRouter>
);
}
function Home() {
return <h1>홈 페이지</h1>;
}
function About() {
return <h1>소개 페이지</h1>;
}
- 리액트에서 상태(state)를 관리하는 방법은 무엇인가요?
- 상태 관리를 위해 useState 훅을 사용할 수 있습니다.
- useState 훅은 상태값과 그 상태를 변경하는 함수를 반환합니다.
- 예를 들어, 다음과 같은 코드는 count 상태값과 setCount 함수를 정의하고, 버튼을 클릭할 때마다 count 상태값이 1씩 증가합니다.
import React, { useState } from "react";
function Counter() {
const [count, setCount] = useState(0);
const handleClick = () => {
setCount(count + 1);
};
return (
<div>
<p>Count: {count}</p>
<button onClick={handleClick}>+1</button>
</div>
);
}
- 리액트에서 부모 컴포넌트와 자식 컴포넌트 간에 데이터를 전달하는 방법은 무엇인가요?
- 부모 컴포넌트에서 props를 통해 자식 컴포넌트에 데이터를 전달할 수 있습니다.
- 자식 컴포넌트에서는 props를 받아와 사용합니다.
- 예를 들어, 다음과 같은 코드는 name이라는 props를 Hello 컴포넌트에 전달하고, Hello 컴포넌트에서 props를 받아와 사용합니다.
function Hello(props) {
return <div>Hello, {props.name}!</div>;
}
function App() {
return <Hello name="React" />;
}
- 리액트에서 이벤트 처리를 어떻게 할 수 있나요?
- 이벤트 처리를 위해 onClick, onChange, onSubmit 등의 이벤트 핸들러를 사용할 수 있습니다.
- 이벤트 핸들러는 함수 형태로 정의되며, 이벤트가 발생했을 때 실행됩니다.
- 예를 들어, 다음과 같은 코드는 버튼을 클릭했을 때 handleClick 함수가 실행됩니다.
function handleClick() {
console.log("Button clicked");
}
function Button() {
return <button onClick={handleClick}>Click me</button>;
}
- 리액트에서 API를 호출하는 방법은
- API를 호출하기 위해 fetch, axios 등의 라이브러리를 사용할 수 있습니다.
- fetch는 브라우저 내장 API로, 네트워크 요청을 보내고 응답을 받아올 수 있습니다.
- axios는 브라우저와 Node.js에서 사용할 수 있는 라이브러리로, HTTP 요청을 보내고 응답을 받아올 수 있습니다.
- 예를 들어, 다음과 같은 코드는 fetch를 사용하여 API를 호출하고, 응답 데이터를 JSON 형태로 파싱합니다.
function App() {
const [data, setData] = useState([]);
useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/users")
.then((response) => response.json())
.then((data) => setData(data));
}, []);
return (
<ul>
{data.map((user) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
- 리액트에서 컴포넌트 스타일링을 어떻게 할 수 있나요?
- 컴포넌트 스타일링을 위해 CSS, Sass, styled-components 등의 방법을 사용할 수 있습니다.
- CSS를 사용하는 경우, className을 사용하여 스타일을 적용할 클래스 이름을 지정합니다.
- Sass를 사용하는 경우, node-sass 패키지를 설치하고 .scss 파일을 작성하여 사용합니다.
- styled-components는 CSS-in-JS 라이브러리로, 컴포넌트 자체에 스타일을 정의합니다.
- 예를 들어, 다음과 같은 코드는 styled-components를 사용하여 Button 컴포넌트에 스타일을 적용합니다.
import styled from "styled-components";
const Button = styled.button`
background-color: #fff;
border: 1px solid #ccc;
border-radius: 3px;
font-size: 16px;
padding: 10px;
`;
function App() {
return <Button>Click me</Button>;
}
- 리액트에서 컴포넌트를 테스트하는 방법은 무엇인가요?
- 컴포넌트를 테스트하기 위해 Jest와 Enzyme 등의 라이브러리를 사용할 수 있습니다.
- Jest는 테스트 프레임워크로, 테스트 코드를 작성하고 실행할 수 있습니다.
- Enzyme은 리액트 컴포넌트를 테스트하기 위한 유틸리티 라이브러리로, 컴포넌트의 렌더링 결과를 검증할 수 있습니다.
- 예를 들어, 다음과 같은 코드는 Jest와 Enzyme을 사용하여 Button 컴포넌트를 테스트합니다.
import React from "react";
import { shallow } from "enzyme";
import Button from "./Button";
describe("<Button />", () => {
it{
const wrapper = shallow(<Button>Click me</Button>);
expect(wrapper.text()).toBe("Click me");
expect(wrapper.hasClass("button")).toBe(true);
});
}
- 위 코드에서 shallow 함수는 Button 컴포넌트를 렌더링하고, wrapper 객체를 반환합니다.
- wrapper 객체의 text 메서드는 렌더링된 결과의 텍스트를 반환하며, toBe 메서드를 사용하여 텍스트가 "Click me"인지 검증합니다.
- wrapper 객체의 hasClass 메서드는 지정한 클래스 이름을 가지고 있는지 검증합니다.
- 리액트에서 라우팅을 구현하는 방법은 무엇인가요?
- 라우팅을 구현하기 위해 react-router-dom 라이브러리를 사용할 수 있습니다.
- BrowserRouter 컴포넌트를 사용하여 라우터를 설정하고, Route 컴포넌트를 사용하여 경로와 컴포넌트를 연결합니다.
- Link 컴포넌트를 사용하여 다른 경로로 이동할 수 있는 링크를 생성할 수 있습니다.
- 예를 들어, 다음과 같은 코드는 react-router-dom을 사용하여 라우팅을 구현합니다.
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import Home from "./Home";
import About from "./About";
import Contact from "./Contact";
function App() {
return (
<Router>
<div>
<nav>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/about">About</Link>
</li>
<li>
<Link to="/contact">Contact</Link>
</li>
</ul>
</nav>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/contact" component={Contact} />
</div>
</Router>
);
}
- 리액트에서 컴포넌트 간 상태를 공유하는 방법은 무엇인가요?
- 부모 컴포넌트에서 자식 컴포넌트로 props를 전달하여 상태를 공유할 수 있습니다.
- 하지만 컴포넌트 구조가 복잡해지면 props를 전달하기 번거로워지고, 중간에 있는 컴포넌트에서는 상태를 사용하지 않는 경우도 있어서 효율적이지 않을 수 있습니다.
- 이 때문에 리액트는 Context API를 제공합니다.
- Context API를 사용하면 부모 컴포넌트에서 생성한 상태를 자식 컴포넌트에서 직접 사용할 수 있습니다.
- 예를 들어, 다음과 같은 코드는 Context API를 사용하여 상태를 공유합니다.
추천 블로그
- React 공식 문서: https://ko.reactjs.org/docs/getting-started.html React를 공부하는 가장 좋은 방법은 React 공식 문서를 읽는 것입니다. React의 기본 개념부터 심화 내용까지 자세히 설명되어 있습니다.
- Velopert 블로그: https://velog.io/@velopert Velopert님의 블로그는 React를 비롯한 프론트엔드 기술에 대한 튜토리얼과 팁을 다루고 있습니다. 특히, React의 기본 개념을 다루는 '리액트를 다루는 기술' 시리즈는 추천합니다.
- ZeroCho TV: https://www.zerocho.com/category/React ZeroCho님의 블로그와 유튜브 채널에서는 React를 비롯한 프론트엔드 기술에 대한 튜토리얼과 강의를 제공하고 있습니다. 초보자부터 심화까지 다양한 내용이 다루어지고 있습니다.
import { createContext, useState, useContext } from "react";
const CountContext = createContext();
function App() {
const [count, setCount] = useState(0);
return (
<CountContext.Provider value={{ count, setCount }}>
<div>
<p>Count: {count}</p>
<ChildComponent />
</div>
</CountContext.Provider>
);
}
function ChildComponent() {
const { count, setCount } = useContext(CountContext);
return (
<div>
<button onClick={() => setCount(count + 1)}>Increment</button>
</div>
);
}
- 이 때, createContext 함수를 사용하여 CountContext라는 새로운 컨텍스트를 생성합니다.
- useState 훅을 사용하여 count 상태와 setCount 함수를 생성합니다.
- CountContext.Provider 컴포넌트를 사용하여 count 상태와 setCount 함수를 자식 컴포넌트에게 전달합니다.
- useContext 훅을 사용하여 자식 컴포넌트에서 CountContext를 가져옵니다.
- 이렇게 가져온 CountContext를 사용하여 count 상태와 setCount 함수를 직접 사용할 수 있습니다.
- 예를 들어, 다음과 같은 코드는 CountContext를 사용하여 상태를 공유합니다.
- 이 코드에서 CountContext를 사용하여 count 상태와 setCount 함수를 공유합니다.
- 부모 컴포넌트인 App에서 CountContext.Provider를 사용하여 count 상태와 setCount 함수를 자식 컴포넌트에게 전달합니다.
- 자식 컴포넌트인 ChildComponent에서 useContext 훅을 사용하여 CountContext를 가져온 후 count 상태와 setCount 함수를 사용합니다.
- 이렇게 하면 중간에 있는 컴포넌트에서도 상태를 사용할 수 있고, props를 전달하는 것보다 간편하게 상태를 공유할 수 있습니다.
반응형
'개발 > 토막난 상식' 카테고리의 다른 글
리액트에서 여러패이지마다 태마 색상을 지정해서 사용 (0) | 2023.03.28 |
---|---|
자주 사용하는 색상 변수명 (0) | 2023.03.28 |
Attempted import error: 'theme' is not exported from 'antd'. (0) | 2023.03.28 |
link a (0) | 2023.03.28 |
Django REST framework의 APIView를 사용하여 보안성을 높이는 방법 (0) | 2023.03.27 |