【问题标题】:MobX - Observable object grabbing only changed fields?MobX - 可观察对象仅抓取更改的字段?
【发布时间】:2016-07-19 23:37:22
【问题描述】:

我有一个 MobX 存储设置,其中包含一个可观察对象,该对象具有默认值,并且其值在加载反应原生场景时从服务器填充。我在UserPreferencesStore 中有一个可观察到的用户偏好列表,如下所示:

class UserPreferencesStore {
    @observable userPreferences = {
        receive_upvotes_mail: 0,
        receive_answers_mail: 0,
        receive_comments_mail: 0
    }
}

在 RN 方面,这些值更改为:

class UserPreferencesStore {
    @observable userPreferences = {
        receive_upvotes_mail: 1,
        receive_answers_mail: 1,
        receive_comments_mail: 0
    }
}

我不确定如何仅将更改的项目发送到服务器。任何的想法?另外,这是在这种情况下使用 mobx 最有效的方法吗,一个可观察的对象,即使我有 20 个字段?

【问题讨论】:

    标签: mobx


    【解决方案1】:

    这应该是为每个字段建立单独的自动运行或反应的问题:

    class UserPreferencesStore {
        @observable userPreferences = {
            receive_upvotes_mail: 1,
            receive_answers_mail: 1,
            receive_comments_mail: 0
        }
    
        constructor() {
            Object.keys(this.userPreferences).forEach(setting => {
                reaction(
                    // whenever a new value is produced...
                    () => this.userPreferences[setting],
                    // ..run this effect
                    (newValue) => storeSettingOnServer(setting, newValue)
                )
            })
        }
    }
    

    【讨论】:

    • 感谢您的快速回答,请保留它,因为它很有用,但我有 2 个问题。 1. 类一运行,构造函数就存储在服务器上。有没有办法让它在数据实际更改之前不存储默认值?我通过 // .. 下的警报(设置)对此进行了测试。运行此效果,它会在任何更改之前提醒每个键。 2.这适用于现场更改,更改字段并立即提交到服务器,但是如何使用保存按钮代替?如果您进行更改,只有更改的字段会在点击保存时发送到服务器?
    • 1.请参阅文档,反应将在第一次跳过效果。 2 使用相同的机制,但是将待处理的更改存储在内存中,并在单击按钮后将待处理的更改发送到服务器
    • 谢谢,会进一步探索:)
    猜你喜欢
    • 1970-01-01
    • 2017-06-07
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多