我有一个MobX商店,它存储我的应用程序的状态树对象(配置):
import {makeAutoObservable} from "mobx"; import {XMLBuilder, XMLParser, XMLValidator} from "fast-xml-parser"; // My config state class Configuration_Store { configurationReadOnly = {}; //Read-only configuration, not write-only configurationWriteOnly = {}; //Write only configuration isConfigurationsEqual = true; // Configuration Identity Check constructor() { makeAutoObservable(this); } // Edit configuration for reading setConfigurationReadOnly(configuration) { this.configurationReadOnly = configuration; } // Change configuration for recording setConfigurationWriteOnly(configuration) { this.configurationWriteOnly = configuration; } // Set check flag for identity of configurations setIsConfigurationsEqual(isConfigurationsEqual) { this.isConfigurationsEqual = isConfigurationsEqual; } } export default Configuration_Store;
我的状态是在应用程序初始化之后,在加载xml文件及其进一步解析之后设置的。事实是,当我更改部分配置(在树对象内)并通过将configurationReadOnly等同于它来重置configurationWriteOnly值时,将不再跟踪我对configurationWriteOnly的进一步更改。停止更改isConfigurationEqual。
My useEffect跟踪了configurationWriteOnly更改时的两个对象
// Monitor the configuration store for changes useEffect(() => { autorun(() => { //configurationStore.isConfigurationsEqual = (JSON.stringify(configurationStore.configurationWriteOnly) === JSON.stringify(configurationStore.configurationReadOnly)) stories.CONFIGURATION_STORE.isConfigurationsEqual = _.isEqual(stories.CONFIGURATION_STORE.configurationWriteOnly, stories.CONFIGURATION_STORE.configurationReadOnly); console.log(stories.CONFIGURATION_STORE.isConfigurationsEqual); }); }, [stories.CONFIGURATION_STORE.configurationWriteOnly]);
我尝试更改可变对象的重置函数,获取初始值来自不可变对象
// Change configuration for recording setConfigurationWriteOnly(configuration) { this.configurationWriteOnly = Object.assign({}, this.configurationWriteOnly, configuration); }