Redux 미들웨어는 비동기 액션과 부작용을 처리하기 위해 React Native 애플리케이션에서 사용되는 강력한 도구입니다. 다음은 React Native에서 자주 사용되는 몇 가지 Redux 미들웨어입니다

Redux Thunk 미들웨어

Redux Thunk 미들웨어를 사용하면 액션 객체 대신 함수를 반환하는 액션 크리에이터를 작성할 수 있습니다. 반환된 함수는 인자로 dispatch를 받을 수 있으며 비동기적으로 액션을 디스패치할 수 있습니다.

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

const store = createStore(
  rootReducer,
  applyMiddleware(thunk)
);
// Example action creator using Redux Thunk middleware
export const fetchUser = (userId) => {
  return (dispatch) => {
    dispatch({ type: 'FETCH_USER_REQUEST' });
    fetch(`https://api.example.com/users/${userId}`)
      .then(response => response.json())
      .then(data => dispatch({ type: 'FETCH_USER_SUCCESS', payload: data }))
      .catch(error => dispatch({ type: 'FETCH_USER_FAILURE', payload: error }));
  };
};

Redux 사가 미들웨어

Redux Saga 미들웨어는 비동기 API 호출과 같은 복잡한 부작용을 쉽게 처리할 수 있는 강력한 라이브러리입니다. 제너레이터를 사용하여 비동기 작업의 흐름을 관리하고 동시성 및 취소와 같은 복잡한 시나리오를 처리할 수 있는 강력한 도구를 제공합니다.

import { createStore, applyMiddleware } from 'redux';
import createSagaMiddleware from 'redux-saga';
import rootReducer from './reducers';
import { userSaga } from './sagas';

const sagaMiddleware = createSagaMiddleware();

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

sagaMiddleware.run(userSaga);
// Example Saga to handle user data fetching
import { call, put, takeLatest } from 'redux-saga/effects';
import { fetchUserSuccess, fetchUserFailure } from './actions';
import { FETCH_USER_REQUEST } from './actionTypes';

function* fetchUser(action) {
  try {
    const response = yield call(fetch, `https://api.example.com/users/${action.payload}`);
    const data = yield response.json();
    yield put(fetchUserSuccess(data));
  } catch (error) {
    yield put(fetchUserFailure(error));
  }
}

export function* userSaga() {
  yield takeLatest(FETCH_USER_REQUEST, fetchUser);
}

Redux 퍼시스트 미들웨어

Redux 퍼시스트 미들웨어를 사용하면 Redux 저장소를 로컬 스토리지 또는 다른 스토리지 메커니즘에 퍼시스트할 수 있습니다. 세션 간에 또는 사용자가 페이지를 새로 고칠 때 애플리케이션의 상태를 유지하려는 경우에 유용합니다.

import { createStore, applyMiddleware } from 'redux';
import { persistStore, persistReducer } from 'redux-persist';
import AsyncStorage from '@react-native-async-storage/async-storage';
import rootReducer from './reducers';

const persistConfig = {
  key: 'root',
  storage: AsyncStorage,
};

const persistedReducer = persistReducer(persistConfig, rootReducer);

const store = createStore(
  persistedReducer,
  applyMiddleware()
);

const persistor = persistStore(store);
// Example usage of persisted store in a React component
import { PersistGate } from 'redux-persist/integration/react';
import { Provider } from 'react-redux';
import { store, persistor } from './store';
import App from './App';

export default function Root() {
  return (
    <Provider store={store}>
      <PersistGate loading={null} persistor={persistor}>
        <App />
      </PersistGate>
    </Provider>
  );
}

이들은 React Native 애플리케이션에서 가장 자주 사용되는 Redux 미들웨어 중 일부입니다. 하지만 애플리케이션의 복잡한 시나리오를 처리하는 데 도움이 되는 더 많은 미들웨어를 사용할 수 있습니다.

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
http://bit.ly/3Y34pE0

Posted by cipleee