【Redux–RTK】React中Redux之RTK的基本使用
1、下载依赖
npm i react-redux @reduxjs/toolkit
2、src/store/index.js中
import {configureStore} from "@reduxjs/toolkit";
import {stuReducer} from "./stuSlice.js";
import {schoolReducer} from "./schoolSlice.js";
const store = configureStore({
reducer:{
student:stuReducer,
school:schoolReducer
}
});
export default store;
3、store/stuSlice.js中
import {createSlice} from "@reduxjs/toolkit";
const stuSlice = createSlice({
name:'stu',
initialState:{
name:'孙悟空',
age:18,
gender:'男',
address:'花果山'
},
reducers:{
setName(state,action){
state.name = action.payload;
},
setAge(state,action){
state.age = action.payload;
}
}
})
export const {setName,setAge} = stuSlice.actions;
export const {reducer:stuReducer} = stuSlice;
4、store/schoolSlice.js中
import {createSlice} from "@reduxjs/toolkit";
const schoolSlice = createSlice({
name:'school',
initialState:{
name:'花果山一校',
address:'花果山大街22号'
},
reducers:{
setName(state,action){
state.name = action.payload;
},
setAddress(state, action) {
state.address = action.payload;
}
}
})
export const {setName,setAddress} = schoolSlice.actions;
export const {reducer:schoolReducer} = schoolSlice;
5、main.jsx中
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App'
import {Provider} from "react-redux";
import store from "./store/index.js";
ReactDOM.createRoot(document.getElementById('root')).render(
<Provider store={store}>
<App />
</Provider>
)
6、App.jsx中基本使用
import {useDispatch, useSelector} from "react-redux";
import {setName,setAge} from "./store/stuSlice";
import {setName as setSchoolName, setAddress as setSchoolAddress} from "./store/schoolSlice";
function App() {
const {student, school} = useSelector(state => state);
const dispatch = useDispatch();
const setNameHandler = () =>{
dispatch(setName('东小川'));
}
const setAgeHandler = () =>{
dispatch(setAge(21));
}
return (
<div className="App">
<p>
{student.name}------
{student.age}------
{student.gender}------
{student.address}------
</p>
<button onClick={setNameHandler}>修改name</button>
<button onClick={setAgeHandler}>修改age</button>
<hr/>
<p>
{school.name}-------
{school.address}-------
</p>
<button onClick={()=>dispatch(setSchoolName('高老庄中小学'))}>修改学校名称</button>
<button onClick={()=>dispatch(setSchoolAddress('高老庄府前街19号'))}>修改学校地址</button>
</div>
)
}
export default App