最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • React Mobx 状态管理

    正文概述 掘金(紫圣)   2020-12-21   916

    如果你的Reac应用使用了Mobx来管理React的状态(state),对于组件自身可观察的state,我们可以使用 mobx-react 的 useLocalStore hook 来管理。

    useLocalStore

    useLocalStore<T, S>(initializer: () => T, source?: S): T
    

    对于每一个组件实例,useLocalStore 的初始化函数只执行一次,并且在组件的整个生命周期里都有效。

    useLocalStore 返回的对象的所有属性都会自动转变为 observable(可观察的),所有的 getters 会被转化为 computed 属性,所有的方法也会与 store 关联并且自动引用 mobx 的 transaction。

    import React from 'react'
    import { useLocalStore, useObserver } from 'mobx-react' // 6.x
    
    export const SmartTodo = () => {
      const todo = useLocalStore(() => ({
        title: 'Click to toggle',
        done: false,
        toggle() {
          todo.done = !todo.done
        },
        get emoji() {
          return todo.done ? '?' : '?'
        },
      }))
    
      return useObserver(() => (
        <h3 onClick={todo.toggle}>
          {todo.title} {todo.emoji}
        </h3>
      ))
    }
    

    不要解构

    不能对 useLocalStore 返回的对象解构,因为解构了,就会破坏响应式。mobx 中的 observables 都是对象,一旦解构,所有的原始变量都会停留在上一个值,而不再是可观察(observable)的了。例如在上面的示例中,你可以取值 todo.title,但是不能结构:const { title } = todo

    使用不可观察的变量

    如果我们想要在 useLocalStore 返回的 store 中存储不可观察的变量属性,例如组件的props,可以通过 useLocalStore 的第二个参数将 props 传递给 store。

    import React from 'react'
    import { useLocalStore, useObserver } from 'mobx-react' // 6.x
    
    export const SmartTodo = (props) => {
      const todo = useLocalStore(
        () => ({
          title: 'Click to toggle',
          done: false,
          toggle() {
            todo.done = !todo.done
          },
          get emoji() {
            return todo.done ? '?' : '?'
          },
        }),
        // 通过 useLocalStore 的第二个参数传递无需观察的变量
        props
      )
    
      return useObserver(() => (
        <h3 onClick={todo.toggle}>
          {todo.title} {todo.emoji}
        </h3>
      ))
    }
    

    关于全局 store

    useLocalStore 的命名看着像是只能用在组件内,但实际上,完全可以使用它再加上 React Context 来处理全局的store。例如,可以设置一堆本地的 store,然后将它们组装在一个根对象中,并在React Context的帮助下在应用程序中传递。

    参考文档:mobx-react.js.org/state-local


    起源地下载网 » React Mobx 状态管理

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元