问题标签 [mobx-state-tree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
836 浏览

mobx - mobx-state-tree - types.model 可以用来为泛型类型建模吗?

我是mobx-state-tree第一次使用,我试图用它types.model来建模一个泛型类型。我正在尝试使用这个现有的 mobx 代码:

我想将它移植到types.model. 我已经做到了这一点:

但我坚持如何一般地输入响应。我可以处理其余的操作 - 有人知道这是否可能吗?

0 投票
1 回答
1367 浏览

javascript - 将“未定义”转换为“地图”时出错`

我正在尝试使用 mobx-state-tree 创建一个超级简单的嵌套存储,但我不知道如何让它工作。要么这个库非常不直观,要么我只是遗漏了一些明显的东西。我试着把所有东西都包起来MST.types.optional(),看看是否有区别,但没有。

这个想法是 Orders 商店有许多买卖订单。我想创建一个没有任何订单的空商店。

当我尝试执行 Orders.js 时,我收到以下错误:

order.js

订单.js

0 投票
2 回答
860 浏览

mobx - “Toasts”应该住在 Mobx 状态树的什么位置?

举杯

我的异步操作看起来像这样:

然后我让视图处理要显示的祝酒词:

但我开始认为 toasts 处理应该存在于商店的异步 try-catch 中,而不是视图中,但随后它将业务逻辑与视图混合,所以我不确定。

有什么建议么?

0 投票
3 回答
1524 浏览

mobx - 确保 MobX 状态树模型中的接口合规性

我为我的打字稿服务器 API 定义了接口,当通过 MobX 状态树定义模型时,我想确保打字稿编译器强制模型快照符合这些接口。

因此,如果一个附加属性被添加到IFoo接口中,但没有添加到FooMST 模型中,那么最好让 typescript 在编译时抱怨它。

执行上述操作的最佳方法是什么?


我知道我可以从模型本身获得有效的打字稿接口:

我不想将此接口用于我的服务器 API,因为:

  1. 不希望在本质上处理快照(普通对象)的 API 接口中包含诸如等之IObservable类的东西。IComplexType

  2. 因此,派生的接口也具有用于不需要的操作的方法签名。


我曾尝试过类似的事情:

但这似乎没有按预期工作。

0 投票
0 回答
763 浏览

mobx-state-tree - 在为 mobx-state-tree 设置 ID 之前尝试访问 types.reference(Model)?

有个问题。所以我正在制作一个使用 github api 的小应用程序(使用 mobx-state-tree 和 mobx)。我对两者都是全新的。

我有一个问题:你看到 selectedRepo 了吗?如果我为它设置一个 id,我可以访问 selectedRepo。但是...如果我在设置 id 之前尝试访问 selectedRepo,应用程序将中断。我试过用 types.optional、types.maybe 来包装它,但无论如何它都行不通。

有任何想法吗?

0 投票
1 回答
79 浏览

reactjs - 是否可以在 React-Native 中设置不调用 render() 方法的类型?mobx 状态树

我现在正在熟悉 React。我选择 mobx-state-tree 进行状态管理。

由于我在我的 Android 项目中使用了 MVP 模式,因此我会将相同的原则应用于 mobx-state-tree。

我目前是如何实现的,它是有效的。

但是,我想在模型中定义 ScreenView 实现。

有没有办法定义一个不触发render()事件的模型类型?

我想要的结果:

我目前的解决方法:

0 投票
1 回答
1712 浏览

javascript - 仅在反应组件渲染功能之外使用 mobx 存储

我有一个反应组件,它包装了一个使用three.js和DOM呈现WebGL的类,并连接了mobx存储值,它随着类生命周期方法而变化。

传入的 mobx 存储仅在生命周期函数(componentDidMount, componentDidUpdate, ..)中的组件渲染函数之外使用。注意到当 store 改变时,组件不会触发重新渲染。但是我在渲染函数中进行了无用的读取,例如在下面的示例中,将triggerRerenderListenerProp={this.props.store.debugSettings.showStats}prop 传递给 div,组件仅在更改时才变为活动状态store.debugSettings.showStats

有没有办法让组件在 render 函数中使用 store 本身来监听 store 更改?

0 投票
1 回答
51 浏览

javascript - 没有观察的缓存视图

我想知道是否可以在不明确观察的情况下缓存视图,或者缓存是否与观察者紧密耦合。

现在我的用例绝对是不寻常的,而不是预期的。我不是被动地使用 MST,而是以请求/响应的方式。因此,在我的响应函数中,我从树(我持有全局参考)中获得了一些(可能很昂贵)视图。是否有一种理智的方式将缓存合并到这样的模型中,或者它是否离 MST 的主要用例太远了?

我构建了一个最小示例,显示了我想要缓存的情况:https://glitch.com/edit/#!/perfect-peripheral(单击左侧的查看日志)

0 投票
1 回答
1306 浏览

mobx - 如何在模型中存储非 mobx-state-tree 类型(类实例)?

我得到:

错误:[mobx-state-tree] 期望 mobx-state-tree 类型作为第一个参数,得到 class HubConnection { constructor(urlOrConnection, options = {}) { options = options || {};

尝试执行此操作时:

我可以像以前一样在我的 React 组件的构造函数中声明它

但是所有附加的事件处理程序也需要在组件中定义

和连接的开始/关闭

理想情况下,我认为这属于模型和模型动作,因此反应组件仅触发模型上的动作,仅此而已。

有没有一种方法可以在 mobx-state-tree 模型中存储除 mobx-state-tree 类型之外的其他类型,您能否以某种方式将其包装在 mobx 类型中,或者这实际上不是 mobx 中的东西,因此是故意的。

0 投票
1 回答
562 浏览

mobx - 在 Mobx-State-Tree 中声明全局操作的最佳方式是什么?

假设我在状态树的不同部分有一组操作,除了它们的逻辑之外,还应该修改根节点上的某些属性,例如,切换加载道具以指示 UI 应该全局更改进度指示器的可见性。

虽然我当然可以使用getRoot,但这会给测试流程带来一定的不便,并降低整体设计的透明度。

可能使用惰性组合和导出实例以及模块中的模型声明可以做到,但这对我来说看起来更奇怪。

在 Mobx-State-Tree 中处理此类问题的建议方法是什么?