2025/02/06: 4개의 글

[React] 리액트에서 Axios를 사용하는 방법과 동작 방식

Posted by nkjok
2025. 2. 6. 16:29 낙서장[1]/1. React
반응형

React에서 Axios를 사용하는 방법과 동작 방식에 대해 설명드릴게요. Axios는 브라우저와 Node.js에서 사용할 수 있는 HTTP 클라이언트 라이브러리로, 비동기 처리를 간단하게 구현할 수 있습니다. 다음은 Axios를 사용하는 방법과 동작 방식에 대한 설명입니다.

1. Axios 설치

먼저 Axios를 설치해야 합니다. NPM이나 Yarn을 사용하여 설치할 수 있습니다:

bash
npm install axios
# 또는
yarn add axios

2. 기본 사용법

Axios를 사용하여 GET 요청을 보내는 예제를 보겠습니다:

javascript
import React, { useEffect, useState } from 'react';
import axios from 'axios';

function App() {
  const [data, setData] = useState(null);

  useEffect(() => {
    axios.get('https://jsonplaceholder.typicode.com/posts')
      .then(response => {
        setData(response.data);
      })
      .catch(error => {
        console.error('Error fetching data:', error);
      });
  }, []);

  return (
    <div>
      <h1>Data</h1>
      {data ? (
        <ul>
          {data.map(item => (
            <li key={item.id}>{item.title}</li>
          ))}
        </ul>
      ) : (
        <p>Loading...</p>
      )}
    </div>
  );
}

export default App;

이 예제에서는 Axios를 사용하여 서버에서 데이터를 가져오고, 그 데이터를 상태에 저장하여 화면에 표시합니다.

3. POST 요청

POST 요청을 보내는 방법도 비슷합니다:

javascript
function submitData() {
  const payload = {
    title: 'New Post',
    body: 'This is a new post.',
    userId: 1
  };

  axios.post('https://jsonplaceholder.typicode.com/posts', payload)
    .then(response => {
      console.log('Data submitted:', response.data);
    })
    .catch(error => {
      console.error('Error submitting data:', error);
    });
}

이 예제에서는 서버에 데이터를 전송하고, 응답을 로그에 출력합니다.

4. async/await 사용법

비동기 처리를 더 간단하게 하기 위해 async/await 문법을 사용할 수 있습니다:

javascript
import React, { useEffect, useState } from 'react';
import axios from 'axios';

function App() {
  const [data, setData] = useState(null);

  useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await axios.get('https://jsonplaceholder.typicode.com/posts');
        setData(response.data);
      } catch (error) {
        console.error('Error fetching data:', error);
      }
    };

    fetchData();
  }, []);

  return (
    <div>
      <h1>Async/Await Example</h1>
      {data ? (
        <ul>
          {data.map(item => (
            <li key={item.id}>{item.title}</li>
          ))}
        </ul>
      ) : (
        <p>Loading...</p>
      )}
    </div>
  );
}

export default App;

이 예제에서는 async/await를 사용하여 비동기 처리를 구현합니다.

5. Axios 인스턴스 생성

Axios의 기본 설정을 통해 중복 코드를 줄이고 일관된 HTTP 요청을 관리할 수 있습니다:

javascript
import axios from 'axios';

const apiClient = axios.create({
  baseURL: 'https://jsonplaceholder.typicode.com',
  timeout: 1000,
  headers: {
    'Authorization': 'Bearer YOUR_TOKEN_HERE'
  }
});

export default apiClient;

이 인스턴스를 사용하여 요청을 보낼 수 있습니다:

javascript
import React, { useEffect, useState } from 'react';
import apiClient from './apiClient';

function App() {
  const [data, setData] = useState(null);

  useEffect(() => {
    apiClient.get('/posts')
      .then(response => {
        setData(response.data);
      })
      .catch(error => {
        console.error('Error fetching data:', error);
      });
  }, []);

  return (
    <div>
      <h1>Custom Axios Instance</h1>
      {data ? (
        <ul>
          {data.map(item => (
            <li key={item.id}>{item.title}</li>
          ))}
        </ul>
      ) : (
        <p>Loading...</p>
      )}
    </div>
  );
}

export default App;

Axios를 사용하면 React 애플리케이션에서 HTTP 요청을 간단하고 효율적으로 수행할 수 있습니다.

반응형

[React] 컴포넌트 간에 데이터를 전달할 때 사용되는 Props

Posted by nkjok
2025. 2. 6. 09:41 낙서장[1]/1. React
반응형

Props란 무엇인가요?

Props는 컴포넌트 간에 데이터를 전달할 때 사용되는 객체입니다. 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달할 수 있으며, 자식 컴포넌트는 이 데이터를 읽기 전용으로 사용할 수 있습니다.

특징

  • props는 컴포넌트 간에 데이터를 전달할 때 사용되는 중요한 개념입니다.
  • props는 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달하는 방법을 제공합니다. (읽기 전용 객체)
  • React에서는 기본 자료형 뿐만 아니라 function, React elements (컴포넌트) 등 다양한 자료형을 props로 전달할 수 있습니다.

Props 사용하기

  1. 부모 컴포넌트에서 데이터 전달하기:
import React from 'react';
import ChildComponent from './ChildComponent';

const ParentComponent = () => {
  const data = 'Hello, World!';

  return (
    <div>
      <ChildComponent message={data} />
    </div>
  );
};

export default ParentComponent;

여기서 ParentComponent는 ChildComponent에 message라는 이름의 props를 전달하고 있습니다. data 변수에 저장된 값이 ChildComponent에 전달됩니다.

  1. 자식 컴포넌트에서 데이터 받기:
import React from 'react';

const ChildComponent = (props) => {
  return (
    <div>
      <p>{props.message}</p>
    </div>
  );
};

export default ChildComponent;

ChildComponent는 전달받은 props를 통해 message 값을 사용할 수 있습니다. 여기서는 props.message를 이용해 값을 출력하고 있습니다.

Props의 활용

Props를 사용하면 컴포넌트 간에 데이터를 효율적으로 전달할 수 있습니다. 예를 들어, 여러 자식 컴포넌트에 동일한 데이터를 전달해야 할 때 유용합니다. 또한, 부모 컴포넌트의 상태 변화에 따라 자식 컴포넌트도 자동으로 업데이트됩니다.

다음은 더 많은 props를 전달하는 예제입니다:

import React from 'react';
import ChildComponent from './ChildComponent';

const ParentComponent = () => {
  const data = {
    title: 'Welcome',
    content: 'This is a simple example of props in React.',
  };

  return (
    <div>
      <ChildComponent title={data.title} content={data.content} />
    </div>
  );
};

export default ParentComponent;

그리고 자식 컴포넌트에서는:

import React from 'react';

const ChildComponent = (props) => {
  return (
    <div>
      <h1>{props.title}</h1>
      <p>{props.content}</p>
    </div>
  );
};

export default ChildComponent;

이렇게 하면 title과 content라는 두 개의 props가 자식 컴포넌트로 전달됩니다.

 

Props의 주요 기능

  1. 데이터 전달: Props는 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달하는 역할을 합니다. 이로 인해 컴포넌트 간의 데이터 공유가 용이해집니다.
  2. 컴포넌트 재사용성 증대: Props를 사용하면 동일한 컴포넌트를 여러 곳에서 다른 데이터로 재사용할 수 있습니다. 이는 코드의 유지보수성을 높이고, 중복을 줄이는 데 도움이 됩니다.
  3. 상태 관리: Props는 읽기 전용으로, 자식 컴포넌트는 Props를 직접 수정할 수 없습니다. 따라서 컴포넌트 간 상태 관리를 명확하게 하고, 의도치 않은 데이터 변조를 방지합니다.

Props의 사용 용도

  1. UI 컴포넌트 구성: Props를 사용하여 다양한 UI 컴포넌트를 구성할 수 있습니다. 예를 들어, 버튼 컴포넌트에 텍스트나 스타일을 Props로 전달하여 다양한 형태의 버튼을 생성할 수 있습니다.
  2. 동적 데이터 렌더링: Props를 사용하여 동적으로 변하는 데이터를 렌더링할 수 있습니다. 부모 컴포넌트에서 상태를 관리하고, 해당 상태를 Props로 자식 컴포넌트에 전달하여 UI를 업데이트할 수 있습니다.
  3. 이벤트 핸들링: Props를 통해 이벤트 핸들러 함수를 자식 컴포넌트에 전달할 수 있습니다. 예를 들어, 버튼 클릭 이벤트를 부모 컴포넌트에서 처리하고자 할 때 유용합니다.

Props의 동작 방식

  1. 부모 컴포넌트에서 전달: 부모 컴포넌트는 자식 컴포넌트를 호출할 때 Props를 함께 전달합니다. Props는 객체 형태로 전달되며, 키-값 쌍으로 이루어져 있습니다.
import React from 'react';
import ChildComponent from './ChildComponent';

const ParentComponent = () => {
  const data = 'Hello, World!';

  return (
    <div>
      <ChildComponent message={data} />
    </div>
  );
};

export default ParentComponent;
  1. 자식 컴포넌트에서 사용: 자식 컴포넌트는 전달받은 Props를 props 객체를 통해 접근합니다. 이를 통해 부모 컴포넌트로부터 전달된 데이터를 사용할 수 있습니다.
import React from 'react';

const ChildComponent = (props) => {
  return (
    <div>
      <p>{props.message}</p>
    </div>
  );
};

export default ChildComponent;
  1. Props의 불변성: Props는 읽기 전용이기 때문에 자식 컴포넌트에서 직접 수정할 수 없습니다. 이는 데이터의 일관성을 유지하고, 예기치 않은 상태 변화를 방지하는 데 도움이 됩니다.
import React from 'react';

const ChildComponent = (props) => {
  // props.message = 'New Message'; // 오류 발생
  return (
    <div>
      <p>{props.message}</p>
    </div>
  );
};

export default ChildComponent;

 

Props는 리액트의 컴포넌트 간 데이터 전달에 중요한 역할을 합니다. Props를 활용하면 컴포넌트를 효율적으로 재사용하고, 동적인 데이터 렌더링을 구현할 수 있습니다. 또한, Props의 읽기 전용 특성은 데이터의 일관성을 유지하는 데 큰 도움이 됩니다.

반응형

[React] app.jsx, main.jsx, package.json, api.js 파일설명

Posted by nkjok
2025. 2. 6. 09:34 낙서장[1]/1. React
반응형

React 프로젝트 파일 설명 및 예제

리액트 프로젝트의 구성 파일들에는 다양한 역할이 있습니다. 여기에서는 app.jsx, main.jsx, package.json, api.js 파일의 사용 용도와 예제를 다룹니다.

1. app.jsx

app.jsx 파일은 주로 애플리케이션의 주 컴포넌트를 정의합니다. 여기서는 주로 루트 컴포넌트 및 하위 컴포넌트들을 가져와서 조립합니다.

예제:

jsx
import React from 'react';
import Header from './components/Header';
import Footer from './components/Footer';
import MainContent from './components/MainContent';

function App() {
  return (
    <div>
      <Header />
      <MainContent />
      <Footer />
    </div>
  );
}

export default App;

위 예제에서는 Header, MainContent, Footer 컴포넌트를 가져와서 최종적으로 렌더링하는 App 컴포넌트를 정의합니다.

2. main.jsx

main.jsx 파일은 애플리케이션의 시작점을 정의하며, 리액트DOM 라이브러리를 사용하여 App 컴포넌트를 HTML 요소에 렌더링합니다.

예제:

jsx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

위 예제에서는 App 컴포넌트를 HTML의 root 요소에 렌더링합니다.

3. package.json

package.json 파일은 프로젝트의 메타데이터를 포함하며, 프로젝트에서 사용하는 의존성 및 스크립트를 정의합니다.

예제:

json
{
  "name": "my-react-app",
  "version": "1.0.0",
  "description": "A simple React application",
  "main": "index.js",
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "dependencies": {
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-scripts": "4.0.3"
  },
  "devDependencies": {},
  "author": "",
  "license": "ISC"
}

위 예제에서는 프로젝트의 기본 정보를 설정하고 react, react-dom, react-scripts 등의 의존성을 포함합니다.

4. api.js

api.js 파일은 외부 API와의 통신을 처리하는 데 사용됩니다. 주로 Axios 라이브러리를 사용하여 HTTP 요청을 보냅니다.

예제:

js
import axios from 'axios';

const API_URL = 'https://api.example.com';

export const fetchData = async () => {
  try {
    const response = await axios.get(`${API_URL}/data`);
    return response.data;
  } catch (error) {
    console.error('Error fetching data:', error);
    throw error;
  }
};

위 예제에서는 fetchData 함수를 정의하여 외부 API로부터 데이터를 가져오고, 에러 발생 시 콘솔에 로그를 출력합니다.

반응형

[React] 리액트 JSX

Posted by nkjok
2025. 2. 6. 09:32 낙서장[1]/1. React
반응형

리액트(JSX)의 사용 용도와 주요 기능, 그리고 동작 방식

리액트(JSX)는 페이스북에서 개발된 JavaScript 라이브러리인 React의 필수 요소로, 사용자 인터페이스를 구축하는 데 사용됩니다. JSX는 JavaScript 코드를 HTML과 같은 구문으로 작성할 수 있게 해주어 코드 작성과 이해를 쉽게 합니다.

1. JSX의 사용 용도

JSX는 다음과 같은 용도로 주로 사용됩니다:

  • DOM 조작: JSX를 통해 HTML 요소들을 직접 조작할 수 있으며, 이를 통해 React 컴포넌트의 UI를 정의합니다.
  • 가독성 향상: HTML과 유사한 구문을 사용함으로써 코드를 보다 직관적으로 이해할 수 있습니다.
  • React 컴포넌트 생성: React에서 컴포넌트를 정의할 때 JSX를 사용하여 코드 작성이 편리하고 효율적입니다.

2. 주요 기능

JSX는 다양한 기능을 제공하며, 그 중 주요 기능은 다음과 같습니다:

  • 태그와 속성: JSX는 HTML과 유사한 태그와 속성을 사용하여 간단하게 UI를 구성할 수 있습니다.
  • JavaScript 표현식 사용: JSX 내에서 중괄호 {}를 사용하여 JavaScript 표현식을 삽입할 수 있습니다.
  • 컴포넌트 및 요소 중첩: 컴포넌트와 HTML 요소를 중첩하여 복잡한 UI를 구성할 수 있습니다.
  • 조건부 렌더링: JavaScript 조건문을 사용하여 JSX 내에서 조건부 렌더링을 쉽게 구현할 수 있습니다.

3. 동작 방식

JSX는 JavaScript 코드로 변환된 후 브라우저에서 실행됩니다. 다음은 JSX의 기본 동작 방식입니다:

  • 컴파일: JSX 코드는 Babel 등의 컴파일러를 사용하여 순수 JavaScript 코드로 변환됩니다.
  • 가상 DOM: 변환된 JavaScript 코드는 React의 가상 DOM을 통해 실제 DOM과 동기화됩니다.
  • 성능 최적화: 가상 DOM을 사용하여 최소한의 변경 사항만 실제 DOM에 적용함으로써 성능을 최적화합니다.

코드 예제

다음은 간단한 JSX 코드 예제입니다:

const Home = () => {

    return (
        <>

            <h1> Home Page</h1>
        </>


    )
}

export default Home;
 

위 코드에서는 Home.jsx 파일을 사용하여 "Home Page"라는 문자열이 브라우저 최상단 화면에 표시되도록 합니다.

 

 

JSX 주의 사항

  1. 중괄호 내부에는 자바스크립트 표현 식만 올 수 있다.
  2. 표현 식은 값으로 평가될 수 있는 식을 말한다. if문, for문이 올 수 없다. 단, 삼항 연산자는 사용할 수 있다.
  3. 숫자, 문자열, 배열 값만 랜더링 된다.
  4. 모든 태그는 닫혀있어야 한다.
  5. 최상위 태그는 반드시 하나여야 한다. (<></>)
반응형