redux的hooks改写步骤
1、安装
npm i redux
2、在src目录下新建一个store文件夹
index.js中
import { createStore } from "redux";
// 导入纯函数
import reducer from "./reducer";
// 创建store实例(在整个应用中是唯一),可以为整个应用的所有组件共享
export default createStore(reducer);
reducer.js中
// 纯函数
// 参数一:state,store中的数据
// 参数二:action,负责接收action(一般是一个对象:{type:'',payload:''})
var initialState={
count:0,
zt:true
}
// 定义纯函数,并导出该函数
export default function reducer(state=initialState,action){
// 判断动作类型,根据不同的类型,执行不同的业务操作
if(action.type == 'ADD'){
// 执行
state.count++
}else if(action.type == 'DELETE'){
state.count--
}else if(action.type == 'XXX'){
}
// 一定不要忘了修改后的state
return state;
}
3、之前是在每个组件中导入仓库,现在使用hooks
npm i react-redux
index.js中
import { Provider } from 'react-redux';
import store from './store/index';
<Provider store={store}>
<App />
</Provider>
内层组件获取仓库写法 (不推荐使用这种写法)
// 在App.js中
// 1、导入
import { connect } from 'react-redux';
function App(props) {
return (
<div className="App">
{//3、拿到值}
{props.count}
{//3、操作值}
<button onClick={()=>{props.add()}}>jia</button>
<button onClick={()=>{props.delete()}}>jian</button>
</div>
);
}
// 2、最底下
export default connect(
(state)=>{
return {
count:state.count
}
},
(dispatch)=>{
return {
add(){
dispatch({type:'ADD',payload:null})
},
delete(){
dispatch({type:'DELETE',payload:null})
}
}
}
)(App);
但是前面都有props,分不清是仓库还是父传子
内层组件获取最终写法
解决:useSelector ,useDispatch
// 1、导入
import { useSelector,useDispatch } from 'react-redux';
function App(props) {
// 2、获取仓库中count 也可以直接获取整个仓库对象不加那个.count就行
var count=useSelector(state=>state.count)
//2、使用useDispatch()获取dispatch函数
var dispatch=useDispatch()
var add=()=>{
dispatch({type:'ADD',payload:null})
}
var jian=()=>{
dispatch({type:'DELETE',payload:null})
}
return (
<div className="App">
{//3、使用}
count: {count}
<button onClick={()=>{add()}}>jia</button>
<button onClick={()=>{jian()}}>jian</button>
</div>
);
}
export default App;