首页 > 互联资讯 > 技术交流  > 

react16.8.0以上MobX在hook中的使用方法详解

目录
  • 引言
  • 一般用法
  • 修饰方法
  • 优化,分离,传值
  • 2024.3.11 更新

引言

关于 mobX 在 react 16.8.0 以上的用法

以下例子均取自官网文档

一般用法

import { observer, useLocalStore } from 'mobx-react';  
const Hooks = observer(() => {  
 const todo = useLocalStore(() =>  ({  
 title: 'Click to toggle', done: false,  toggle() {  
  todo.done = !todo.done  
  },  
 get emoji() {  
 return todo.done ? '' : ''  
  },  
  }));  
 return 

{todo.title} {todo.emoji}

})

可以看到原来的修饰符@observer,现在是使用 HOC 来进行扩展的;

修饰方法

1:

import { useLocalStore, useObserver } from 'mobx-react';  
function Person() {  
 const person = useLocalStore(() => ({ name: 'John' }))  
 return useObserver(() => (  
 
{person.name}
))}

使用 useObserver(()=>JSX.Element) 方法取代 observer(()=>JSX.Element)

2:

import { Observer, useLocalStore } from 'mobx-react';  
function ObservePerson() {  
 const person = useLocalStore(() => ({ name: 'John' }))  
 return (  
 
{person.name} I will never change my name
{() =>
{person.name}
}
)}

使用部分渲染, 只有被 包裹的才能监听到对应值的改变

优化,分离,传值

import React, { FC } from 'react';import { observer, useLocalStore } from 'mobx-react';  
function initialFn(source) {  
 return ({  
 count: 2, get multiplied() {  
 return source.multiplier * this.count  
  },  
  inc() {  
 this.count += 1  },  
  });  
}  
const Counter: FC<{ multiplier: number }> = observer(props => {  
 const store = useLocalStore(  
  initialFn,  
 Object.assign({ a: 1 }, props),// 可以传任意值  
  );  
 return (  
 
{store.multiplied}
)})

这种分离的方法,基本已经耦合性已经很低了

2024.3.11 更新

之前 mobx 官方对于 api 又进行了修改,本文也做对应的修改

重要修改: useLocalStore 将要废弃 !!

使用 useLocalObservable 替代, 而且他们的使用方案也不同:

import { useLocalObservable, Observer } from "mobx-react-lite"
const Todo = () => {
    const todo = useLocalObservable(() => ({
        title: "Test",
        done: true,
        toggle() {
            this.done = !this.done
        }
    }))
    return (
        
            {() => (
                

{todo.title} {todo.done ? "[DONE]" : "[TODO]"}

)}
) }

可直接作为局部或者全局的变量存储

const user = mobx.observable({
    name: "Noa"
})
const Todo = () => {
    return (
        
            {() => (
                

{user.name}

)}
) }

以上就是react16.8.0以上MobX在hook中的使用方法详解的详细内容,更多关于react MobX hook使用方法的资料请关注讯客其它相关文章!

react16.8.0以上MobX在hook中的使用方法详解由讯客互联技术交流栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“react16.8.0以上MobX在hook中的使用方法详解