跳到主要内容

MobX 6 + React FC + TS 的使用 最佳实践

此篇为 mobx 6 + react + ts 最新应用实践

MobX官网的示范代码风格 class 组件和函数式组件混用,翻看 github 仓库中mobxjs/mobx-react-lite的 readme.md 文件后发现,有些废弃的 api 也在官网示例上,感觉官网的示例比较难以理解。

https://i.imgur.com/7JTL3aL.png

安装 👇

安装两个官方包

pnpm i mobx mobx-react-lite

创建 👇

// store
// 可以创建多个store,使用时引入对应store即可
import { makeAutoObservable } from "mobx";

interface StoreProps {
data: {
name: string;
};
changeName: (value: string) => void;
}

const store: StoreProps = makeAutoObservable<StoreProps>({
data: {
name: "default name",
},
changeName: (val: string) => (store.data.name = val), // action
});

export default store;

使用 👇

// any component
import { observer } from 'mobx-react-lite'
import store from '@/store'

const Welcome = () => {
const { data: { name } } = store;
return <p> hello { name } </p>
}

export defalut observer(Welcome);// observer返回一个响应式组件

修改 👇

// any component
import store from '@/store'

const ChangeInput = () => {
const { changeName } = store;
return <input onChange={ ({ target: { value } }) => changeName(value) }></input>;
};

export defalut ChangeInput

相比 Redux 的 /store /action /reducer connect action dispatch redux-thunk(异步中间件) 一系列痛苦操作(当然 Redux 现在也有 hook 了),减少了中间写 connect action dispatch 等操作。

mobx 6 通过 makeAutoObservable 创建数据源,observer 订阅数据。

mobx 可以通过创建多个 store,避免单 store 臃肿。

代码更简洁,可读性更好。