# fed-e-task-04-02 **Repository Path**: frontend_site/fed-e-task-04-02 ## Basic Information - **Project Name**: fed-e-task-04-02 - **Description**: 本模块中我们重点学习 React 数据流方案,其中会包括两个具体的库,分别是 Redux、MobX。掌握这些内容,轻松应对大型应用中的数据状态管理 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-12-04 - **Last Updated**: 2021-01-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). ## Available Scripts ```jsx // Content API const ThemeContext = React.createContext(); // Content.Provider // Content.Consumer // 使用场景1: class组件 -- Class.contentType static contextType = ThemeContext; // 消费最近Content上的数据 const { themeColor } = this.context; // 使用场景2: function组件 -- useContent const context = useContext(ThemeContext) ``` ## 1.react-router-dom ```shell npm install --save react-router-dom #便于验证多个功能 npm install --save redux react-redux ``` ## 2.mobx [mobx 学习笔记](https://www.cnblogs.com/chenshufang/p/12152589.html) ```shell npm install react-app-rewired customize-cra @babel/plugin-proposal-decorators --save--dev npm install mobx --save npm install mobx-react --save ``` ## 3.前期准备 ```javascript // config-overrides.js const { override, addDecoratorsLegacy } = require("customize-cra"); module.exports = override(addDecoratorsLegacy()); ``` ## 4.部分代码 ```jsx import { inject, observer } from 'mobx-react'; const App = ({ appStore }) => { console.log(appStore.appName) return (
appStore
) } // 函数组件使用方式 export default inject('appStore')(observer(App)); // Class组件使用方式 @inject('appStore') @observer class App extends Components { console.log(this.appStore.appName) render () { return (
appStore
) } } ``` ## 5.注意事项 ```javascript import { observable, makeAutoObservable, runInAction } from 'mobx'; class AppleStore { @observable count = 0; constructor () { // 针对mobx6.x+的代码 // 无需通过observable和action等修饰器, // 直接在构造函数中使用makeAutoObservable来实现observable和action修饰器功能,使代码更加简洁 // 关于 makeAutoObservable ,实际是是自动加 obserbable 和 action 而已 makeAutoObservable(this); } increment = () => { console.log(this); this.count = this.count + 1; } decrement () { console.log(this); this.count = --this.count; } // 异步更新状态 async fetch () { const { data } = await mock(3); console.log('async data:', data); runInAction(() => this.count = data); } } const appleStore = new AppleStore(); export default appleStore; ``` ## 6.数据监测 ```javascript import { observable, makeAutoObservable, runInAction, autorun } from 'mobx'; class AppleStore { constructor () { // 针对mobx6.x+的代码 // 无需通过observable和action等修饰器, // 直接在构造函数中使用makeAutoObservable来实现observable和action修饰器功能,使代码更加简洁 // 关于 makeAutoObservable ,实际是是自动加 obserbable 和 action 而已 makeAutoObservable(this); autorun(() => { console.log('autorun:', this.count); }, { delay: 1000 }); } } ``` ## 7.调试saga代码 [调试saga代码](https://gitee.com/front_clone/react-state-examples) ```jsx [调试saga代码](https://gitee.com/front_clone/react-state-examples) ```