MobX实现全局统一加载动画
实现类似gitlab导航栏的全局加载动画效果
参考文档: https://mobx.js.org/getting-started.html
npm install --save mobx
npm install --save mobx-react-lite
1. 创建Mobx组件
import {autorun, action, makeObservable, observable} from "mobx"; class GlobalLoading { loading = false; constructor() { makeObservable(this, { loading: observable, changeStatus: action });
// 当loading属性改变时候会自动运行此段代码,将状态打印到控制台 autorun(() => this.report); } get report() { console.log("状态" + this.loading); }
// 外部调用此方法,用来改变状态 changeStatus(status) { this.loading = status; } } export const globalLoading = new GlobalLoading();
2.在导航栏组件中调用在第一部中创建的MobX组件:globalLoading
import {globalLoading} from "../mobx/GlobalLoading";
......
export default function Navigate(props) { const [current, setCurrent] = useState('home'); const navigate = useNavigate(); const LoadingIcon = observer(({store}) => { return () }); const items = [ { key: 'logo', icon: , disabled: true, }, { label: '总览', key: 'home', icon: , }, .... ]; .... return (
3. 在其他应用页面改变 GlobalLoading 中的状态,在案例中直接定义一个按钮直接改变这个状态,实际中可以在请求后台开始和结束的时候改变这个状态,来实现动画效果的改变
import React from "react"; import {Button} from "antd"; import {globalLoading} from "../../components/mobx/GlobalLoading.jsx"; export default function Home(props) { return (HOME); }