react16.8.0以上MobX在hook中的使用方法詳解
引言
關(guān)于 mobX 在 react 16.8.0 以上的用法
以下例子均取自官網(wǎng)文檔
一般用法
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 <div onClick={todo.toggle}> <h3>{todo.title} {todo.emoji}</h3> </div> })
可以看到原來的修飾符@observer
,現(xiàn)在是使用 HOC 來進(jìn)行擴(kuò)展的;
修飾方法
1:
import { useLocalStore, useObserver } from 'mobx-react'; function Person() { const person = useLocalStore(() => ({ name: 'John' })) return useObserver(() => ( <div> {person.name} <button onClick={() => (person.name = 'Mike')}>No! I am Mike</button> </div> ))}
使用 useObserver(()=>JSX.Element)
方法取代 observer(()=>JSX.Element)
2:
import { Observer, useLocalStore } from 'mobx-react'; function ObservePerson() { const person = useLocalStore(() => ({ name: 'John' })) return ( <div> {person.name} <i>I will never change my name</i> <div> <Observer>{() => <div>{person.name}</div>}</Observer> <button onClick={() => (person.name = 'Mike')}> I want to be Mike </button> </div> </div> )}
使用部分渲染, 只有被 <Observer></Observer>
包裹的才能監(jiān)聽到對(duì)應(yīng)值的改變
優(yōu)化,分離,傳值
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 ( <div> <button id="inc" onClick={store.inc}> {`Count: ${store.count}`} </button> <span>{store.multiplied}</span> </div> )})
這種分離的方法,基本已經(jīng)耦合性已經(jīng)很低了
2021.3.11 更新
之前 mobx 官方對(duì)于 api 又進(jìn)行了修改,本文也做對(duì)應(yīng)的修改
重要修改: useLocalStore
將要廢棄 !!
使用 useLocalObservable
替代, 而且他們的使用方案也不同:
import { useLocalObservable, Observer } from "mobx-react-lite" const Todo = () => { const todo = useLocalObservable(() => ({ title: "Test", done: true, toggle() { this.done = !this.done } })) return ( <Observer> {() => ( <h1 onClick={todo.toggle}> {todo.title} {todo.done ? "[DONE]" : "[TODO]"} </h1> )} </Observer> ) }
可直接作為局部或者全局的變量存儲(chǔ)
const user = mobx.observable({ name: "Noa" }) const Todo = () => { return ( <Observer> {() => ( <h1> {user.name} </h1> )} </Observer> ) }
以上就是react16.8.0以上MobX在hook中的使用方法詳解的詳細(xì)內(nèi)容,更多關(guān)于react MobX hook使用方法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解react內(nèi)聯(lián)樣式使用webpack將px轉(zhuǎn)rem
這篇文章主要介紹了詳解react內(nèi)聯(lián)樣式使用webpack將px轉(zhuǎn)rem,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09react hooks實(shí)現(xiàn)防抖節(jié)流的方法小結(jié)
這篇文章主要介紹了react hooks實(shí)現(xiàn)防抖節(jié)流的幾種方法,文中通過代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-04-04關(guān)于React中setState同步或異步問題的理解
相信很多小伙伴們都一直在疑惑,setState 到底是同步還是異步。本文就詳細(xì)的介紹一下React中setState同步或異步問題,感興趣的可以了解一下2021-11-11React 事件綁定的實(shí)現(xiàn)及區(qū)別
事件綁定也是其中一部分內(nèi)容,通過事件委托和事件合成,React 在內(nèi)部對(duì)事件進(jìn)行優(yōu)化和處理,減少了事件處理函數(shù)的調(diào)用次數(shù),從而提升了性能,本文主要介紹了React事件綁定的實(shí)現(xiàn)及區(qū)別,感興趣的可以了解一下2024-03-03