使用 MobX
自
1.2.0-beta.1
开始支持
MobX 为复杂项目中状态管理提供了一种简单高效的机制;Taro 提供了 @tarojs/mobx
来让开发人员在使用 MobX 的过程中获得更加良好的开发体验。
#
安装#
API#
onErrorMobx 异常监听。
#
isUsingStaticRendering自
1.3.6
开始支持
判断是否开启了服务端渲染(该状态为全局状态)。
#
useStaticRendering自
1.3.6
开始支持
服务端渲染状态设置(该状态为全局状态)。
#
useLocalStore自
1.3.6
开始支持
将对象转换为 observable
对象,其中 getter
会被转换为 computed
属性,方法会与 store
进行绑定并自动执行
mobx transactions,比如:
#
useAsObservableSource自
1.3.6
开始支持
与 useLocalStore
的区别是,它将纯(不包含 getter
或方法)对象转换为 observable
,主要使用场景为:
如果对象某个属性的值需经过复杂运算才能获得,可通过该方法进行包装,这样在组件的生命周期中该运算只需要运算一次。
一般情况下
useLocalStore
仅用于组件内部,如果useLocalStore
中的对象需要依赖外部传递的属性,那么可通过useAsObservableSource
将这些属性进行转换,而后在useLocalStore
对象中进行引用,这样在外部属性改变时自动通知useLocalStore
对象对变化进行响应,比如:该场景也可直接使用
useLocalStore
中的第二种用法来实现:
#
observer将组件设置为监听者,以便在可观察对象的值改变后触发页面的重新渲染。
注:
不要在
JSX
中对可观察对象进行引用,比如:这是因为
@tarojs/mobx
通过监听组件的render
(小程序编译后为_createData
)方法来触发更新;在小程序中,JSX
的代码会被编译到wxml
文件中,此时对可观察对象的引用(比如:counterStore.counter
)早已脱离了@tarojs/mobx
的监控,故此对该属性的更改并不会触发更新操作。如使用
@observable
装饰器来定义可观察对象时,请确保该属性已经初始化,比如:如果
isUsingStaticRendering
为true
,该方法不做任何事情。
#
Provider全局 store
设置,比如:
注:
Provider
必须作用于入口文件(即:src/app.js
),在其他地方使用无效。不支持嵌套,即全局只能存在一个
Provider
。在
mobx-react
中,可通过以下方式设置store
:而在
@tarojs/mobx
中,我们需要使用以下方式设置:
#
inject将 Provider
中设置的 store
提取到组件的 props
中,该 API
只适用于类组件
,比如:
或
注:
无论以何种方式使用
inject
,其后的observer
均不能省略。不要在
inject
中引用可观察对象,这将导致属性改变后页面不更新,比如:
#
PropTypes自
1.3.6
开始支持
@tarojs/mobx
提供了以下 PropTypes
来验证 Mobx 的结构:
- observableArray
- observableArrayOf
- observableMap
- observableObject
- arrayOrObservableArray
- arrayOrObservableArrayOf
- objectOrObservableObject