首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反应-本机与mobx抛出错误

反应-本机与mobx抛出错误
EN

Stack Overflow用户
提问于 2018-02-17 21:22:11
回答 1查看 3.7K关注 0票数 2

我用mobx实现了本机的react,我得到了这个错误。

mobx遇到了一个由反应或观察者组件引发的不明确的异常,在:'ReactionReaction@1错误:序列化未能找到未定义的默认模式

根成分

代码语言:javascript
复制
    import React, { Component } from 'react';
import {
    View,
    AsyncStorage,
    Text,
} from 'react-native';
import { StackNavigator } from 'react-navigation';

import { observer, Provider } from 'mobx-react/native'
import { create } from 'mobx-persist'
import { AppStore,UserStore } from '../stores'
const stores = { UserStore, AppStore };

import {
    Walkthrough
} from '../screens'

const hydrate = create({
    storage: AsyncStorage
})

let Main = null;

hydrate('appStore', AppStore).then((a) => {
    console.log(a);
    AppStore.done();   
    }
)

hydrate('userStore',UserStore).then((a)=>{
    console.log(a)
    Main = StackNavigator(
        {
            Walkthrough: { screen: Walkthrough },

        }, {
            headerMode: 'none',
            lazy: true,
            initialRouteName: 'Walkthrough',
        }
    )
})



@observer
class Root extends Component {
    constructor(props){
        super(props);
        this.state = {

        }
    }


    render(){
        // const ready =  UserStore.storeHydrated &&  AppStore.storeHydrated;
        const ready = false;
        return (
            <View>
            {!ready &&  
                <View><Text>Splash screen component</Text></View>}

            </View>

        )  
    }
}

export default Root;

AppStore

代码语言:javascript
复制
    import { observable, action, computed } from 'mobx'
import { persist } from 'mobx-persist'

class AppStore {
    @observable storeHydrated = false
    @observable requesting = false

    constructor(){
        console.log("AppStore")
    }

    @action setRequesting(){
        this.requesting = !this.requesting;
    }

    @action done(){
        //this.storeHydrated = true
    }


}


const appStore = new AppStore();
export default appStore;

UserStore

代码语言:javascript
复制
    import { observable, action, computed } from 'mobx'
import { persist } from 'mobx-persist'

class UserStore {
    @persist @observable first_name;
    @persist @observable last_name;
    @persist @observable email;
    @persist @observable tasks;
    @persist @observable storeHydrated = false;
    @persist @observable alreadyRegister = false;

    constructor(){
        this.setUser = this.setUser.bind(this);
        console.log("userStore")
    }

    @action setUser(data){
        this.first_name = data.first_name
        this.last_name = data.last_name;
        this.email = data.email;
        this.tasks = data.tasks;
    }

    @action done(){
        //this.storeHydrated = true;
        // if(this.alreadyRegister){
        //     this.getUserDetails();
        // }
    }

    @action setIsFirstTimeInApp(firstTIme){
        this.firstTimeInApp = firstTIme;
    }


}


const user = new UserStore();
export default user;

我已经尝试做的是删除应用程序,并再次运行,但仍然没有什么改变,它抛给我同样的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-18 10:11:05

问题是

代码语言:javascript
复制
@persist @observable storeHydrated = false;

在UserStore内部不应该持久化,因为它是在应用程序的每个负载上重新启动的值。

因为它是持久化的,所以true的值在第一次运行后保存在存储中。

因此,请使用:

代码语言:javascript
复制
@observable storeHydrated = false;

然后,在定义StackNavigator之前,呈现Main。

额外小费:

在使用@persist @observable varName时,您应该始终初始化一个值,甚至是null,因为没有正确地支持“未定义”的序列化,因此它应该如下所示:@persist @observable varName = null (或任何适合于空字符串、0、true、false等的东西)。至于特别计划,则应:

代码语言:javascript
复制
@persist('list') @observable varName = [] 
@persist('object') @observable varName = null
@persist('map') @observable varName = new Map()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48846060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档