效果
下载依赖
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.stateconst { str } = this.props.userreturn (<><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);