问题标签 [mobx-react]

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 投票
3 回答
9228 浏览

reactjs - mobx + 反应意外令牌

所以我从https://facebook.github.io/react/blog/2016/07/22/create-apps-with-no-configuration.html创建了一个没有配置的应用程序

我安装了 mobx 和 mobx-react ,但在@symb 之前仍然显示意外令牌的错误。

我是否需要添加其他内容,或者我当前的配置有误?:(

包.json

.babelrc

和代码

0 投票
1 回答
8094 浏览

javascript - 如何为整个 MobX 可观察数组设置新值

在 MobX 中,如何在不重新设置每个值的情况下为整个可观察数组设置新值?

第一个想法是:

但这不会触发autorun,我只会删除我的observable array并用新的值/数组替换它。

那么,这样做的正确方法是什么?

我对此的解决方案是使用另一个带有setter的变量,并在setter 函数内部通过index更改可观察数组索引,替换、添加和删除索引。像这样:

这里是jsFiddle

这是正确的方法吗?
或者有没有办法只使用相同的变量为整个数组重新赋值?

0 投票
1 回答
486 浏览

javascript - Mobx 对 Computed 属性调用 Action

这是代码:

因此,主要目标是,当配置文件数据尚未验证时,我们将从服务器重新获取它,然后,在等待数据更改时,我们将从本地存储中提供缓存值。

Anddd....我的问题是,为什么它会给我一个“计算值不能调用动作函数”的东西?

谢谢!:D

0 投票
0 回答
783 浏览

mobx - 对观察到的物体未观察到的属性的变化做出反应

我的应用商店的观察变量中有一个带有 TypeScript 类实例的外部库:

这个实例有一个方法,当被调用时,它会更新其内部状态,使对象保持原样:

现在,由于 Mobx 没有观察这个对象本身,也没有观察它的(我假设的)属性,所以只会在 active_obj 字段上直接发生变化(比如分配给它的新值)。由于 MyClass 的实例由外部库提供并最终在该库的组件中呈现,因此我无法将可观察对象和观察者添加到其类结构或 React 组件中。请注意,这只是我认为更改对象属性不会触发重新渲染的原因......

我不得不通过使用其他观察到的变量来作弊,我直接用无意义的数据进行更改,同时我调用未观察到的实例进行更改。在树的上层组件上添加对该变量的引用,我可以触发重新渲染,从而在外部库的(未观察到的)组件上产生更新。

我的问题是,如何最好地让 Mobx 意识到变化,以便它可以通知 store.active_obj 实例的观察者?

我认为 Mobx 文档的这一部分对此提出了警告,但没有解决方法或解决方案:

** 如果喜欢对象而不是字符串,并且如果它们由自己的 Like 组件呈现,则 Likes 组件不会重新呈现特定喜欢内部发生的变化。

从这里,在页面的末尾

编辑

根据@mweststrate 的问题,我提供了一些上下文:

  • 我的应用程序控制它的数据,但它必须从中创建外部类的实例
  • 实例的数据被封装和变异,但它是通过用户触发事件从我的应用程序端询问来完成的(意思是,我知道数据何时更新)
  • 基本上,类使用应用程序的数据根据​​用户选择提供不同的数据视图,并使用其 React 组件呈现它
  • 还在我控制的组件中的应用程序的其他地方使用这些更改的数据
  • 更改的数据是外部类内部的一部分,我不能依赖它
  • 由于 Mobx 跟踪它可以看到的突变,因此使用 Observable 不能直接工作

我认为一些可能的解决方案:

  • 当我调用它引用的实例进行更改时,手动通知观察者可观察的 active_object 已更改
  • 有一个 Mobx 可以跟踪的容器对象,当我更改它的 sentinel 属性时,会注意到该更新并带有它的实际实例
0 投票
0 回答
731 浏览

reactjs - Mobx 组件在状态更改后重新渲染组件

我在我的 React 应用程序中引入了 Mobx。该应用程序未使用任何框架(Flux Redux 等)。

inject在每个组件上,我首先使用包的装饰器注入状态mobx-react

在更新时,我直接更改组件的 onChange 方法的状态,状态包含一个对象数组(blocks),每个块都有一些特定的属性:

然后我使用从状态中获取的值来渲染组件。

onChange但实际上,在执行完并且状态myState改变后,似乎没有触发渲染功能。

即使组件是状态订阅者,关于如何不触发重新渲染的任何建议?

0 投票
1 回答
700 浏览

mobx - 为什么 mobx 注入需要使用 react 的上下文?

@inject实现不依赖于mobx-react'Provider组件(将其属性存储在 react 的上下文中)的装饰器的潜在问题是什么?

的用法是inject这样的:

它只是将其参数与组件道具合并。

0 投票
1 回答
1039 浏览

dependency-injection - mobx-react Provider相互依赖时如何添加store?

基于另一个商店初始化商店并将它们都放入的最佳实践是什么Provider?我有一家名为它的商店AuthManager,它拥有一个名为user. 我还有另一家商店叫GoalManager. 我需要初始化的user属性。我想这样构造:AuthManagerGoalManagerGoalManager

但是以后不可能在 react 的上下文中添加一些东西,因为有些孩子无法根据上下文的变化进行更新!我通过将AuthManager实例发送到GoalManager的构造函数解决了这个问题,但我不喜欢它:

然后:

我不喜欢这个解决方案,因为我不得不依赖GoalManagerAuthManager它只依赖于AuthManager.user. 然后测试GoalManager更难(因为你必须模拟一个大对象)。

有没有更好的解决方案?

0 投票
0 回答
1054 浏览

javascript - 为什么我无法通过 mobx-react 从 Provider 获取道具

我正在尝试使用 Mobx 来管理我的 react-project 的状态,但我无法通过 mobx-react 从 Provider 获取道具。

这是我的根元素(我删除了路由器以简化问题):

这是我的childNode:

但是当我登录商店时,结果是未定义的,我不知道为什么我无法获取商店。

从chrome devtools中,我发现Provider有商店但App无法获得商店,我很困惑。

我的店铺如下:

0 投票
0 回答
130 浏览

reactjs - 从自定义状态容器到 Mobx 的性能提升?

我们有一个sails-js 应用程序,它的ui 是使用React 构建的,并且状态容器是使用MVVM 方法创建的。即使用户没有做任何事情,我们的应用程序也会占用过多的内存(超过 400mb)。有时它也会崩溃(特别是在 iphone cordova build 上)。此外,即使我们没有涉及太多操作(除了加载和播放一些网络音频歌曲等),我们的 webpack 包也超过 18mb(未最小化,2.5mb 最小化)。

那么,性能滞后和捆绑包过大的原因可能是什么?我该如何解决?我认为有望解决问题的一种选择是实施 Mobx 而不是我们用于状态管理的自定义解决方案。因为它对我来说非常复杂,而且绝对没有文档。您是否有理由也可能解决我的问题?

谢谢!

0 投票
1 回答
222 浏览

javascript - 在 observabel 数组中添加的元素是不可观察的 + ReactJs

我有一个可观察的数组,它工作正常。在向该数组添加/推送元素后,我有添加按钮用于向该数组添加元素,添加的元素不可观察,但仍有其他元素是可观察的。我正在使用 mobx-react。这是代码片段:

this.model.metaValues 是一个可观察的数组。

请提出一些想法。