一、React项目中状态管理方式
- Redux
需要用户手动订阅状态变化
- Redux+React-Redux结合
不需要手动订阅
- redux + @rematch/core
语法更加接近vuex
二、ActionCreator模块
- action
描述用户行为的对象
- ActionCreator
用以创建用户行为描述的方法函数
export const increment = (payload)=>{return {type:IN_CREMENT,payload}}
三、redux与react-redux结合实现状态管理
- 安装react-redux
cnpm i react-redux -S
- 在根组件App外,全局注入store
import store from './store'import {Provider} from 'react-redux'ReactDOM.render(<Provider store={store}><App /></Provider>,document.getElementById('root'));
- 在需要获取store数据的组件中,使用connect进行提取
connect作用是,将store中的数据转移到当前组件的props中
import {connect} from 'react-redux' // 1.专门取数据的角色class Num extends Component { //2. 需要使用数据的角色render() {console.log('Num组件',this.props);}}const mapStateToProps=(state)=>{ //3. 给connect使用的特定方法函数//自定义的方法函数,用以将状态机中的state设置到当前组件的props中return {num:state //num是自定义的props属性名,state就是状态机中的数据包}}export default connect(mapStateToProps)(Num) //4. 调用connect,让他把数据转移到props中
- 在需要修改store数据的组件中,通过connect将对应的actionCreator转换为dispatch并使用
前提是,需要事先提取actionCreator模块
import {increment,decrement} from '../action' //引入actionCreator方法函数import {connect} from 'react-redux'class Btn extends Component {render() {console.log('Btn组件',this.props);let {children,increment,decrement} = this.props//这里的 increment,decrement 已经变成了对应的dispatch}}export default connect(null,{increment,decrement})(Btn)
