问题标签 [mobx]
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.
meteor - React + MobX - not re-rendering update to state
I've setup a new sample/boilerplate project for testing out using Meteor with React & MobX (using Mantra architecture). The project is at https://github.com/markoshust/mantra-matui-mobx
I'm having an issue where the state change of the State.header.title property is not properly reflecting the updated state change on re-render.
My state is built by pulling in simple objects: https://github.com/markoshust/mantra-matui-mobx/blob/master/client/modules/core/stores/route.js
Into one master observable object: https://github.com/markoshust/mantra-matui-mobx/blob/master/client/main.js#L8
I'm listing for route change and calling an action to update state: https://github.com/markoshust/mantra-matui-mobx/blob/master/client/modules/core/reactions/route.js#L10
This action updates state: https://github.com/markoshust/mantra-matui-mobx/blob/master/client/modules/core/actions/route.js#L5
The console is logging out proper state change, so the state is being updated properly. However, the component is not being re-rendered with the updated state (this line is console.log'ing old state val): https://github.com/markoshust/mantra-matui-mobx/blob/master/client/modules/core/containers/Header.js#L6
I'm seeing the 'updating...' message, so the component is re-rendering, but it appears to still be pulling in the old state. I did add observer
to all of my react components:
https://github.com/markoshust/mantra-matui-mobx/blob/master/client/modules/core/components/Header.js
javascript - 我可以手动触发 MobX 中特定属性的观察者吗?
我有一个对象,它具有一些持久保存在 cookie 中的可观察属性:
这显然不理想,因为现在我将数据保存在两个地方(属性和 cookie)。理想情况下,我想做这样的事情:
像这样的解决方案可能有效:
有没有更好的方法来实现这一目标?
javascript - MobX - 将参数传递给可观察的操作以更改可观察的值?
我有一个 MobX 商店,以及一个反应本机类设置和工作,但不是按预期的那样。我有一个可观察的用户偏好列表,UserPreferencesStore
如下所示:
在 react native 类中,我想基于 onPress 更新上述 observables,TouchableHighlight
如下所示:
这是onPressPreference
更新不起作用的可观察对象的操作...
正如警报所显示的那样,参数被完美地传递了,但是当“附加”这里以更新传递的首选项可观察存储值preferenceName
时,它似乎不起作用。UserPreferencesStore.userPreferences.preferenceName
但是,如果我创建 3 个操作,每个首选项一个,并在 onPress 上触发它们,那么它会起作用,并且可观察对象会正确更新商店中的值,但是重复了很多代码,我真的很想让它使用传递给单个动作的参数。
知道如何让传递的参数与单个操作一起更新相应的 observable 的值吗?
javascript - Mobx 性能
我从不同的来源了解到 mobx 的性能优于 react 渲染器,并且比 redux 更快。但是,如果我进行了几次测试,它表明向 mobx 可观察对象添加新数据非常慢。在 react-native 环境中,每毫秒都很重要,使用解决方案很棘手,即使循环超过 200 个元素和填充数组也需要超过 100 毫秒我真的很喜欢 mobx 我希望有人可以看看测试代码并给我一些提示 - 我'我做错了以及如何提高性能。
在我的笔记本电脑上,大约需要 120 毫秒才能完成。没有 observable-s 需要不到 1ms
mobx - MobX - 可观察对象仅抓取更改的字段?
我有一个 MobX 存储设置,其中包含一个具有默认值的可观察对象,并且其值是在加载反应原生场景时从服务器填充的。我有一个可观察的用户偏好列表,UserPreferencesStore
如下所示:
在 RN 方面,这些值更改为:
我不确定如何仅将更改的项目发送到服务器。任何的想法?此外,这是在这种情况下使用 mobx 的最有效方法吗,一个可观察的对象,即使我有 20 个字段?
javascript - .map() 未定义,即使我传递了一个数组
我试图在我的组件渲染方法中映射一个数组,但它一直在说.map is not a function
,即使它是一个数组。
控制台日志给了我这个结果:
[{"id":1,"name":"Berlin","country":"Germany","default":1,"slug":"berlin"},{"id":2,"name": "汉堡","国家":"德国","默认":0,"slug":"汉堡"}]
我不知道为什么.map
未定义-我在这里遗漏了什么吗?
javascript - 在 getter 上使用装饰器
我正在尝试转换以下代码:
进入这个:
我一直在尝试阅读装饰器,但我完全不知道如何实现这一点。
我将它与 mobX 一起使用,mobX 具有@computed
使用extendObservable
. 但是,它是用 TypeScript 编写的,与 ecmascript 中的工作方式不太匹配。extendRxObservable
是在extendObservable
.
mobx - MobX - 用户配置文件不同的字段和空默认值问题
我有一个具有以下userData
默认值的 AuthStore:
该对象在登录时使用相应的字段填充,如下所示:
电子邮件字段是特殊的,只有在经过身份验证的用户查看自己的个人资料时,它才应该被获取/存在。当访问另一个用户的个人资料时,除了电子邮件之外,所有其他字段都应该存在,并且是从没有电子邮件的 api 中获取的。
由于这是 2 种不同类型的用户,一个 auth 用户有他们的电子邮件,当他们访问任何其他用户时,没有电子邮件,只有所有其他相应的字段。处理这个多用户数据用例的最佳方法是什么?
除了电子邮件之外,是否应该有 2 家商店具有相同的重复字段?所以上面的电子邮件在 AuthStore 中完好无损,然后另一个 UserStore 具有相同的字段而没有电子邮件,并创建 2 个不同的反应原生 ownerProfile.js(对于 auth 用户)和 profile.js(对于其他用户)?这感觉不太对...
存储已登录的 userData 对象以在应用程序刷新时检索它(如果可用)的最佳方法是什么,因为它当前在应用程序刷新时清空配置文件的 userData 字段,并且由于我使用 AuthStore.userData.username 访问配置文件会导致错误。 toUpperCase(); 我收到一个错误,因为它试图在 null 上运行 .toUpperCase() 。
我遇到了 hydrate/toJson 但我对整个事情感到困惑,甚至不确定何时/如何实施它们,或者即使它们是我问题的解决方案。由于这个问题,我被困在我的项目上,无法继续前进。
知道如何使用 MobX 解决这个问题吗?
javascript - 连接商店时 Mobx.inject 和 Mobx.observer 的主要区别是什么?
我开始将我的商店连接到 mobx。observer(['store'],...)
我想知道使用或使用之间的区别inject('store')(observer(...))
我认为注入的主要区别不是反应性的。那么注入观察者的意图到底是什么?
javascript - 不能给无状态函数组件 refs
我尝试访问我的组件中的一些引用。但是我在控制台中有这个错误。
withRouter.js:44 Warning: Stateless function components cannot be given refs (See ref "pseudo" in FormInputText created by RegisterForm). Attempts to access this ref will fail.
这是我的组件:
另外,当我单击Object {pseudo: null}
控制台中的按钮时。我希望有一个对象null
。
我不确定为什么这不起作用。请注意,我的反应树使用mobx-react
.