TypeScript с Redux в приложении React
Интеграция TypeScript с Redux в приложении React повышает безопасность типов и улучшает удобство обслуживания кода. В этом руководстве рассматривается настройка TypeScript с Redux, включая определение типов и интеграцию с компонентами React.
Шаг 1: Установка зависимостей
Сначала установите необходимые пакеты для типов Redux, React-Redux и TypeScript.
npm install redux react-redux @reduxjs/toolkit
npm install @types/react-redux --save-devШаг 2: Настройка Redux Store
Создайте хранилище Redux с помощью TypeScript. Определите типы для состояния и действий и настройте хранилище.
import { configureStore } from '@reduxjs/toolkit';
import { rootReducer } from './reducers';
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;
const store = configureStore({
  reducer: rootReducer,
});
export default store;Шаг 3: Определите действия и редукторы
Создайте типы действий, создатели действий и редукторы. Используйте TypeScript для определения состояний и типов действий для строгой типизации.
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
interface CounterState {
  value: number;
}
const initialState: CounterState = {
  value: 0,
};
const counterSlice = createSlice({
  name: 'counter',
  initialState,
  reducers: {
    increment: (state) => {
      state.value += 1;
    },
    decrement: (state) => {
      state.value -= 1;
    },
    incrementByAmount: (state, action: PayloadAction<number>) => {
      state.value += action.payload;
    },
  },
});
export const { increment, decrement, incrementByAmount } = counterSlice.actions;
export default counterSlice.reducer;Шаг 4: Подключите Redux к компонентам React
Используйте хуки useSelector и useDispatch из React-Redux для подключения состояния Redux и диспетчеризации действий в компонентах React.
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { RootState, AppDispatch } from './store';
import { increment, decrement, incrementByAmount } from './counterSlice';
const Counter: React.FC = () => {
  const dispatch = useDispatch<AppDispatch>();
  const count = useSelector((state: RootState) => state.counter.value);
  return (
    <div>
      <h1>{count}</h1>
      <button onClick={() => dispatch(increment())}>Increment</button>
      <button onClick={() => dispatch(decrement())}>Decrement</button>
      <button onClick={() => dispatch(incrementByAmount(10))}>Increment by 10</button>
    </div>
  );
};
export default Counter;Шаг 5: Интеграция Redux Store с React
Оберните основной компонент React в компонент Provider из React-Redux, чтобы передать хранилище Redux в приложение.
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import store from './store';
import App from './App';
ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);Заключение
Использование TypeScript с Redux в приложении React обеспечивает строгую типизацию и повышает надежность кода. Выполнив эти шаги, можно настроить хранилище Redux с помощью TypeScript, определить действия и редукторы, а также интегрировать Redux с компонентами React.