Redux Thunk를 이용한 컨텐츠 스크롤 캡쳐 구현 예제

이 예제는 Redux Thunk를 사용하여 웹 페이지의 컨텐츠를 스크롤하고 캡처하는 방법을 보여줍니다.

목차

개요

웹 페이지의 스크롤 이벤트를 감지하고, 스크롤 위치에 따라 컨텐츠를 캡처하는 기능은 다양한 웹 애플리케이션에서 유용하게 사용될 수 있습니다. 이 예제에서는 Redux Thunk 미들웨어를 사용하여 이러한 기능을 구현합니다.

설치

먼저 프로젝트에 Redux와 Redux Thunk를 설치해야 합니다. 다음 명령어를 사용해 패키지를 설치합니다:

npm install redux redux-thunk

또는

yarn add redux redux-thunk

구현

1. 액션 타입 정의

먼저 액션 타입을 정의합니다. SCROLL_CAPTURE_REQUEST, SCROLL_CAPTURE_SUCCESS, SCROLL_CAPTURE_FAILURE 세 가지 액션 타입을 사용합니다.

// actions/types.js

export const SCROLL_CAPTURE_REQUEST = 'SCROLL_CAPTURE_REQUEST';
export const SCROLL_CAPTURE_SUCCESS = 'SCROLL_CAPTURE_SUCCESS';
export const SCROLL_CAPTURE_FAILURE = 'SCROLL_CAPTURE_FAILURE';

2. 액션 생성자 함수 작성

액션 생성자 함수는 액션을 생성하는 역할을 합니다. 스크롤 캡쳐 요청, 성공, 실패에 대한 액션 생성자 함수를 작성합니다.

// actions/scrollCapture.js

import {
  SCROLL_CAPTURE_REQUEST,
  SCROLL_CAPTURE_SUCCESS,
  SCROLL_CAPTURE_FAILURE,
} from './types';

export const scrollCaptureRequest = () => ({
  type: SCROLL_CAPTURE_REQUEST,
});

export const scrollCaptureSuccess = (data) => ({
  type: SCROLL_CAPTURE_SUCCESS,
  payload: data,
});

export const scrollCaptureFailure = (error) => ({
  type: SCROLL_CAPTURE_FAILURE,
  payload: error,
});

3. 스크롤 캡쳐를 위한 Thunk 액션 생성자 함수 작성

스크롤 캡쳐를 위한 Thunk 액션 생성자 함수를 작성합니다. 이 함수는 스크롤 위치를 감지하고 컨텐츠를 캡쳐합니다.

// actions/captureActions.js

import {
  scrollCaptureRequest,
  scrollCaptureSuccess,
  scrollCaptureFailure,
} from './scrollCapture';

const captureScrollRequest = () => {
  return (dispatch) => {
    dispatch(scrollCaptureRequest());

    // 스크롤 위치 감지 및 캡쳐 로직 작성
    // ...

    // 스크롤 캡쳐 성공 액션 디스패치
    dispatch(scrollCaptureSuccess(capturedData));
  };
};

export default captureScrollRequest;

4. 리듀서 작성

리듀서는 액션에 따라 상태를 업데이트하는 역할을 합니다. SCROLL_CAPTURE_REQUEST, SCROLL_CAPTURE_SUCCESS, SCROLL_CAPTURE_FAILURE 액션 타입에 대한 처리 로직을 작성합니다.

// reducers/scrollCapture.js

import {
  SCROLL_CAPTURE_REQUEST,
  SCROLL_CAPTURE_SUCCESS,
  SCROLL_CAPTURE_FAILURE,
} from '../actions/types';

const initialState = {
  loading: false,
  capturedData: null,
  error: null,
};

const scrollCaptureReducer = (state = initialState, action) => {
  switch (action.type) {
    case SCROLL_CAPTURE_REQUEST:
      return {
        ...state,
        loading: true,
        error: null,
      };
    case SCROLL_CAPTURE_SUCCESS:
      return {
        ...state,
        loading: false,
        capturedData: action.payload,
      };
    case SCROLL_CAPTURE_FAILURE:
      return {
        ...state,
        loading: false,
        error: action.payload,
      };
    default:
      return state;
  }
};

export default scrollCaptureReducer;

사용법

스크롤 캡쳐를 사용하기 위해 Redux Store와 액션 생성자 함수를 설정해야 합니다.

// index.js (Redux Store 구현)

import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from './reducers';

const store = createStore(rootReducer, applyMiddleware(thunk));

스크롤 캡쳐를 실행하기 위해 captureScrollRequest 액션 생성자 함수를 디스패치합니다.

// App.js

import { connect } from 'react-redux';
import { captureScrollRequest } from './actions/captureActions';

const App = (props) => {
  // ...

  const handleCaptureScroll = () => {
    props.captureScrollRequest();
  };

  return (
    <div>
      // ...
      <button onClick={handleCaptureScroll}>스크롤 캡쳐</button>
    </div>
  );
};

export default connect(null, { captureScrollRequest })(App);

참고 자료