效果
下载依赖
npm install redux react-redux @reduxjs/toolkit --save
在src目录下创建文件
- 创建index.ts文件
import { configureStore } from '@reduxjs/toolkit'
import userSlice from './userReducer'
const store = configureStore({
reducer: {
user: userSlice.reducer
}
})
export default store
- 创建userReducer.ts文件
import { createSlice } from '@reduxjs/toolkit'
const userSlice = createSlice({
name: 'user',
initialState: {
str: '我是redux未修改前的文字'
},
reducers: {
editStr(state, action) {
state.str = action.payload
}
}
})
export default userSlice
在入口文件中引用
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import { Provider } from 'react-redux';
import store from './store/index'
const root = ReactDOM.createRoot(
document.getElementById('root') as HTMLElement
);
root.render(
<Provider store={store}>
<App />
</Provider>
);
在函数式组件中使用
import { useSelector, useDispatch } from 'react-redux'
import { useNavigate } from 'react-router-dom';
import React, { useState } from 'react';
import { Button } from 'antd';
const Home: React.FC = () => {
const navigate = useNavigate();
const { str } = useSelector((state:StoreType.State) => state.user)
let dispatch = useDispatch()
const [msg] = useState<string>('点击改变redux');
const handleChange = () => {
dispatch({
type: 'user/editStr',
payload: '我是工作台修改redux后的值'
})
}
return (
<>
<h1>工作台</h1>
<Button type="primary" onClick={handleChange}>{msg}</Button>
<Button type="primary" onClick={() => navigate('/authMag/userMag')}>跳转到用户页面</Button>
<h1>{str}</h1>
</>
)
}
export default Home
在类组件中使用
import React from "react"
import { Button } from 'antd';
import { connect } from "react-redux";
import { Link } from 'react-router-dom'
type PropType = {
user: {
str: string
},
dispatch: Function
}
type StateType = {
msg: string
}
class User extends React.Component<PropType, StateType> {
constructor(props: PropType | Readonly<PropType>) {
super(props)
this.state = {
msg: '点击改变redux'
}
}
componentDidMount() {
console.log('User-componentDidMount')
}
handleChange = () => {
this.props.dispatch({
type: 'user/editStr',
payload: '我是User页修改redux后的值'
})
}
render() {
const { msg } = this.state
const { str } = this.props.user
return (
<>
<h1>用户管理</h1>
<Button type="primary" onClick={this.handleChange}>{msg}</Button>
<Button type="primary">
<Link to="/home">跳转到工作台页面</Link>
</Button>
<h1>{str}</h1>
</>
)
}
}
const mapStateToProps = (state:PropType) => ({
user: state.user
});
const mapDispatchToProps = (dispatch: Function) => ({
dispatch
});
export default connect(mapStateToProps, mapDispatchToProps)(User);