TypeScript가 포함된 Redux 툴킷
17801 단어 reactwebdevreduxtypescript
이 경우 간단한 앱을 만들고 싶습니다. 사용자를 redux 상태에 추가할 수 있습니다.
redux 툴킷 설치
npm i @reduxjs/toolkit react-redux
반응에 대한 typescript 추가
npm i typescript @types/react-redux @types/react-dom @types/react @types/node @types/jest
tsconfig.json 생성
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react"
}
}
src/app/store.ts에 새 파일을 만들어 저장소를 구성하지 않도록 합니다.
import { configureStore } from '@reduxjs/toolkit'
import usersReducer from '../features/users/usersSlice'
export const store = configureStore({
reducer: {
// register your reducer here
users: usersReducer,
},
})
export type AppDispatch = typeof store.dispatch
export type RootState = ReturnType<typeof store.getState>
왜냐하면 우리는 typescript를 사용하고 있기 때문입니다. 디스패치 및 상태 선택기에 대한 사용자 정의 유형 후크를 추가하는 것이 좋습니다. 따라서 이 코드를 복사하여 app/hooks.ts에 붙여넣습니다.
import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'
import type { RootState, AppDispatch } from './store'
// Use throughout your app instead of plain `useDispatch` and `useSelector`
export const useAppDispatch = () => useDispatch<AppDispatch>()
export const useAppSelector: TypedUseSelectorHook<RootState> = useSelector
index.tsx에서 redux의 공급자로 앱 구성 요소 래핑
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
import { store } from './app/store'
import { Provider } from 'react-redux'
ReactDOM.render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>,
document.getElementById('root')
)
상태, 감속기 등을 저장하기 위해 src/features/users/usersSlice.ts 생성
import { PayloadAction, createSlice } from '@reduxjs/toolkit'
import { RootState } from '../../app/store'
interface UsersState {
value: [
{
id: number
name: string
}
]
}
const initialState: UsersState = {
value: [
{
id: 1,
name: 'jack',
},
],
}
export const usersSlice = createSlice({
name: 'users',
initialState, // users state
reducers: {
// logic to add user
addUser: (state, action: PayloadAction<{ id: number; name: string }>) => {
state.value.push(action.payload)
},
},
})
// export state selector
export const selectUsers = (state: RootState) => state.users.value
// export dispatch actions
export const { addUser } = usersSlice.actions
// export reducer for register it to the store
export default usersSlice.reducer
app.tsx에서 상태 및 감속기 작업을 사용해 보겠습니다.
import React, { useEffect, useState } from 'react'
import { useAppDispatch, useAppSelector } from './app/hooks'
import { addUser, selectUsers } from './features/users/usersSlice'
export default function App() {
const dispatch = useAppDispatch()
const users = useAppSelector(selectUsers)
const [name, setName] = useState<string>('')
return (
<div>
<p>{JSON.stringify(users)}</p>
<input
type="text"
placeholder="Name"
onChange={(e) => setName(e.target.value)}
/>
<button onClick={() => dispatch(addUser({ id: users.length + 1, name }))}>
Add User
</button>
</div>
)
}
서버에 별표를 표시하고 짜잔! 마침내 redux에 typescript를 사용할 수 있습니다
Reference
이 문제에 관하여(TypeScript가 포함된 Redux 툴킷), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mhx/redux-toolkit-with-typescript-3500텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)