我正在玩mobx-state-tree
,我正在尝试找出最好的方法来让像window.innerHeight
被绑在我的商店里这样的东西。我对 完全陌生Mobx
,所以我无法立即想象如何使用observer()
(或其他相关方法)集成它。似乎有一些很好的信息可以Mobx
在文档中纯粹使用,但我想知道推荐用于什么mobx-state-tree
。
根据我的猜测,我可以从window
using开始,遵循依赖注入getEnv()
的文档:
Example.js
import { types, getEnv } from "mobx-state-tree"
const Box = types.model({
width: types.number,
height: types.number
})
.actions(self => ({
setWidth() {
const width = getEnv(self).window.innerWidth
self.width = width / 10
}
}))
export default Box
测试文件
import {Box} from './Example'
//mock window for testing
const window = {
innerWidth: 1200
}
const store = Box.create({
width: 100,
height: 100
}, {
window: window /* inject window into store */
}
)
//Test
it('updates from window width', () => {
store.setWidth()
expect(store.width).toBe(120)
})
这在我在测试套件中运行时有效。
我将如何写这个以便任何时候window.innerWidth
改变Box
都会重新计算它的宽度?也许我可以使用views
, 并且已经Box
成为代表更改的更大 UI 存储的子节点?
任何建议将不胜感激,并提前致谢!