redux将所有数据存储到树中,且树是唯一的。
Redux基本概念
安装
npm i redux react-redux @reduxjs/toolkit
使用
导入包
在定义store的jsx中导入,当然如果是写在一个文件中就没关系
import { configureStore } from "@reduxjs/toolkit";
在main.jsx/index.jsx中导入Provider
import { Provider } from 'react-redux';
在每一个需要使用到redux全局变量的组件内部导入connect
import { connect } from 'react-redux';
定义actions
可以单独写一个文件,中放一个对象的全局变量来存actions
定义reducer
reducer是一个函数,需要传入两个参数,一个是state,另外一个是action
action是一个对象,state是当前存的数据,需要赋一个初值
例如:
const reducer = (state="0", action) => {
switch(action.type) {
}
};
state同时可以维护一个对象,此时reducer可以这样写
const reducer = (state={
currentOperand: "",
lastOperand: "",
operation: "",
}, action) => {
switch(action.type) {
default:
return state;
}
};
定义store
const store = configureStore({
reducer: reducer
});
store 和两个reducer的名称可以任意,自己知道就行。
这里reducer和reducer重名,可以只写一个reducer来表示reducer: reducer
例如:
const store = configureStore({
reducer
});
使用store
在main.jsx/index.jsx中将有使用redux的组件用<Provider></Provider>
括起来,同时需要给Provider传一个参数store,就是我们定义的store
例如:
<Provider store={store}>
<BrowserRouter>
<App />
</BrowserRouter>
</Provider>
mapDispatchToProps
将dispatch函数绑定到组件上
mapDispatchToProps函数定义
例如:
const mapDispatchToProps = {
add_digit: digit => {
return {
type: ACTIONS.ADD_DIGIT,
digit: digit,
}
}
}
使用connect组件绑定
例如:
export default connect(null, mapDispatchToProps)(DigitButton);
之后就可以通过 this.props.add_digit
来使用add_digit函数了
mapStateToProps
将state数据绑定到组件上
mapStateToProps函数定义
例如:
const mapStateToProps = (state, props) => {
return {
currentOperand: state.currentOperand,
lastOperand: state.lastOperand,
operation: state.operation,
}
}
使用connect组件绑定
例如
export default connect(mapStateToProps)(Calculator);
之后就可以通过 this.props. ...
来访问state中的数据了