1. class

    import { inject, observer } from "mobx-react";
    // 需要使用mobx-react提供的Provider 包裹,需要使用的值直接使用props传递
    import { Provider } from "mobx-react";
    <Provider {...store}>{children}</Provider>
    // inject把需要使用的值放到props里
    // 这里使用的observer来自mobx-react
    @inject('store')
    @observer
    class A extends React.Component {
    ...
    this.props.store.value
    }
  2. function

    import { createContext, useContext } from 'react';
    const store = {
    ...
    }
    // createContext接受一个参数,该参数是Ctx.Provider上的value的默认值,没有默认值就给null
    const Ctx = createContext(store);
    const {Provider ,Consumer} = Ctx;
    // useContext接受createContext创建的context对象
    // useContext返回Ctx.Provider上的value值
    const useStore = () => useContext(Ctx);
    // 使用的时候需要被Ctx.Provider包裹,把对象赋给value
    <Ctx.Provider value={store}>
    </Ctx.Provider>
    <Consumer>{value => ...}</Consumer>
    // function component 需要用mobx-react-lite里observer处理
    // class使用的mobx-react里的observer,这里是不同的
    import { observer } from "mobx-react-lite";
    const B: React.FC =e () => {
    // 可以直接解构拿值
    const store = useStore();
    }
    export observer(B);
  3. 项目中的运用class

    // apps\link\src\solutions\biz-form\page\menu-buttons\pur-order-generate\PurOrderGenerate.tsx
    import * as React from "react"; import { BizFormPresenter } from '../presenter/BizFormPresenter'; const context = React.createContext<BizFormPresenter>(null); export const PresenterProvider = context.Provider;
    // class 使用方法
    export const PresenterConsumer = context.Consumer;
    // function 使用方法
    export const useBizFormPresenter = () => React.useContext(context); @contextProvider(PresenterConsumer, 'presenter')
    @observer
    export class PurOrderGenerateBtn extends React.Component<{
    presenter?: BizFormPresenter;
    entityName: string;
    }> { }
    export function contextProvider<P1, P2, PassName extends string = 'passContextValue'>(ContextConsumer: React.ComponentType<React.ConsumerProps<P2>>, passPropName: PassName = "passContextValue") {
    return (ComponentClass: React.ComponentType<P1 & { [key in PassName]?: P2 }>) => {
    class WrappedComponent extends React.PureComponent<P1 & { [key in PassName]?: P2 } & { passContextValue?: P2 }> {
    render() {
    return (
    <ContextConsumer>
    {
    (value: P2) => { const passProps: { [key in PassName]: P2 } = {
    [passPropName]: this.props[passPropName] || value
    } as any; return (
    <ComponentClass {...this.props} {...passProps} />
    );
    }
    }
    </ContextConsumer>
    );
    }
    }; hoistNonReactStatics(WrappedComponent, ComponentClass);
    return WrappedComponent as any;
    }
    }
  4. 项目中的运用hook

    // apps\link\src\main\screens\purchase\pur-comparison\form\customizeRightButtons.tsx
    const context = React.createContext<BizFormPresenter>(null); const CustomizeRightButtons: React.FC<CustomizeRightButtonsPropsModel> = (props) => {
    const presenter = useBizFormPresenter(); return (
    <>
    {presenter.api.getFrom().value}
    </>
    );
    }; export default observer(CustomizeRightButtons);
  5. 不需要响应式

    //直接调用
    store.value
  6. useLocalObservable

    import { Observer, useLocalObservable } from "mobx-react-lite";
    
    export default function MobxCount() {
    // 可以用来代替 useState useCallBack
    const state = useLocalObservable(() => ({
    count: 10,
    increment() {
    state.count++;
    },
    decrement() {
    state.count--;
    },
    })); return (
    <div>
    <Observer>{() => <div>{state.count}</div>}</Observer>
    <button
    onClick={() => {
    state.decrement();
    }}
    >
    decrement
    </button>
    <button
    onClick={() => {
    state.increment();
    }}
    >
    increment
    </button>
    </div>
    );
    }

mobx hook中的使用的更多相关文章

  1. MobX 在 hook 中的使用

    关于 mobX 在 react 16.8.0 以上的用法 以下例子均取自官网文档 一般用法: import { observer, useLocalStore } from 'mobx-react'; ...

  2. hook中ref使用

    hook使用ref 父组件: 引入                  useRef 声明ref的名字     const dateRef = useRef() 复值给组件         ref={d ...

  3. TS基础应用 & Hook中的TS

    说在前面 本文难度偏中下,涉及到的点大多为如何在项目中合理应用ts,小部分会涉及一些原理,受众面较广,有无TS基础均可放心食用. **>>>> 阅完本文,您可能会收获到< ...

  4. React MobX 开始

    MobX 用于状态管理,简单高效.本文将于 React 上介绍如何开始,包括了: 了解 MobX 概念 从零准备 React 应用 MobX React.FC 写法 MobX React.Compon ...

  5. CI框架源码阅读笔记6 扩展钩子 Hook.php

    CI框架允许你在不修改系统核心代码的基础上添加或者更改系统的核心功能(如重写缓存.输出等).例如,在系统开启hook的条件下(config.php中$config['enable_hooks'] = ...

  6. Linux LSM(Linux Security Modules) Hook Technology

    目录 . 引言 . Linux Security Module Framework Introduction . LSM Sourcecode Analysis . LSMs Hook Engine: ...

  7. Git Server & Git Hook

    http://ju.outofmemory.cn/entry/16893 我喜欢 github,我现在的个人代码全部是托管在上面了,但是一些公司或者某些项目不适合放入github中,你希望能有一个完全 ...

  8. HOOK API 在多线程时应该注意的问题点

    在使用INLINE HOOK API实现对系统API的拦截时,正常情况下并没有太大问题,但一旦涉及到多线程,不管是修改IAT还是JMP,2种方法均会出现不可预料的问题,特别是在HOOK一些复杂的大型系 ...

  9. API HOOK

    API HOOK技术是一种用于改变API执行结果的技术,Microsoft 自身也在Windows操作系统里面使用了这个技术,如Windows兼容模式等. API HOOK 技术并不是计算机病毒专有技 ...

  10. API HOOK技术

    API HOOK技术是一种用于改变API执行结果的技术,Microsoft 自身也在Windows操作系统里面使用了这个技术,如Windows兼容模式等. API HOOK 技术并不是计算机病毒专有技 ...

随机推荐

  1. Postman中的测试脚本(Test scripts)

    一.postman测试脚本 测试脚本是在发送请求之后运行的,并且已经从服务器接收到响应. 二.测试举例 1.设置环境变量 pm.environment.set("variable_key&q ...

  2. 记一次修改dotnet-cnblogs图片路径的正则匹配规则

    大佬的GitHub 前言   因为最近一时心血来潮,学了markdown,我觉得但凡是个人,对于不用word或html就可以有不错的排版,而且使用起来简单便捷,都会投向markdown的怀抱中的.又因 ...

  3. SpringBoot + Quartz 集成

    Quartz 应用启动加载集群配置 @Bean 注解交由 Spring BeanFactory 容器管理 @Bean public JobDetailFactoryBean testJobDetail ...

  4. redis的linux下安装

    Linux 源码安装 下载地址:http://redis.io/download,下载最新稳定版本. 本教程使用的最新文档版本为 2.8.17,下载并安装: # wget http://downloa ...

  5. 和为K的子数组

    给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 . /** * @param {number[]} nums * @param {number} k ...

  6. linux express配置ssl证书,开启https访问

    1.下载ssl证书的Nginx版本,在项目根目录新建https空文件夹,把crt文件和key文件复制到https文件夹中; 2.安装依赖:npm i fs http https 3.修改www文件的内 ...

  7. java8 利用 ConcurrentHashMap list根据 某个属性 去重

    //自定义方法private static <T> Predicate<T> distinctByKey(Function<? super T, Object> k ...

  8. postman脚本语法大全,不包括插件语法

    官方语法例子:https://learning.postman.com/docs/writing-scripts/script-references/test-examples/ 官方语法库:http ...

  9. vscode 中前端代码不能通过ctrl+鼠标左键点击跳转(亲测可行)

    1.ctrl+p 查找 jsconfig.json文件.如果没有,就在根目录下新建jsconfig.json 2.若已经有文件,如下图新增paths 若没有,复制下面内容到jsconfig.json ...

  10. 在线访问GET/POST及格式化json工具

    http://coolaf.com/在线访问及格式化json工具谷歌浏览器json插件不是很好实现.安装,替代方案