일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 클래스 추가하기 #특정 url 클래스 추가 #사이트 접속시 클래스 추가 #오공완 #javascript
- 오공완
- 리액트
- 오공완 #리액트 공부 #React
- 리스트랜더링
- map()에는 key값이 필요
- React
- Today
- Total
new_bird-hyun
서버 측에서 데이터를 점진적으로 불러오는 패턴 - React Streaming과 Suspense 본문
server.js
const express = require('express');
const app = express();
app.get('/api/stream', async (req, res) => {
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
for (let i = 1; i <= 5; i++) {
await new Promise((resolve) => setTimeout(resolve, 1000));
res.write(`data: ${JSON.stringify({ message: `데이터 ${i} 로드됨` })}\n\n`);
}
res.end();
});
app.listen(5000, () => console.log('서버 실행 중...'));
StreamingComponent.js
import React, { useEffect, useState } from 'react';
export default function StreamingComponent() {
const [messages, setMessages] = useState([]);
useEffect(() => {
const eventSource = new EventSource('/api/stream');
eventSource.onmessage = (event) => {
const newMessage = JSON.parse(event.data);
setMessages((prev) => [...prev, newMessage.message]);
};
return () => eventSource.close();
}, []);
return (
<div>
<h1>서버에서 점진적으로 데이터 로드</h1>
{messages.map((msg, index) => (
<p key={index}>{msg}</p>
))}
</div>
);
}
React Streaming과 Suspense를 활용하면 초기 로딩 속도를 개선할 수 있음
'코딩 공부' 카테고리의 다른 글
React 서버 컴포넌트와 클라이언트 컴포넌트 혼합 사용하기 (0) | 2025.02.13 |
---|---|
React 18 서버 컴포넌트(Server Components) 개념과 활용법 (0) | 2025.02.03 |
React에서 무한 스크롤과 가상화를 결합하여 성능 최적화하기 (0) | 2025.01.31 |
React에서 대규모 데이터를 가상화와 페이징으로 처리하기 (0) | 2025.01.20 |
React에서 가상화와 필터링 결합하기 (0) | 2025.01.13 |