2016-04-10 11 views
2

私はAsyncStorage、react-native-store、react-native-simple-storeを試しましたが、それらはシミュレータでは動作しますが、デバイスでは動作しません。私はreduxとredux-thunkを使用して格納された状態をロードしています。React Native:ストレージはシミュレータでのみ動作します

export function loadState() { 
    return (dispatch, getState) => { 
    store.get('state').then((state) => { 
     if (state) { 
     let action = { 
      type: LOAD_STATE, 
      state: fromJS(state), 
     }; 
     dispatch(action); 
     } else { 
     store.save('state', initialState); 
     } 
    }).catch((error) => { 
     console.log(error); 
    }); 
    }; 
} 

、ユーザーが更新をトリガーするときに、私の減速に私が戻る前に、ストレージ内の状態を更新します:私は(反応するネイティブ・シンプル・ストアを使用して)私のルートコンポーネントのcomponentDidMountメソッドに次の関数を呼び出します

case SET_UPDATED_DATE: 
    newState = state.set('updatedDate', action.date); 
    store.update('state', newState.toJS()) 
    .catch((error) => console.log(error)); 
    return newState; 

初期化/更新の方法は不十分ですか?デバイスのために特別な設定を行う必要がありますか?または、デバイスmain.jsbundleまたは開発サーバー上で実行されている場合、redux-thunkはサポートされていません(loadState関数の返された関数の上部にログステートメントを置くと、デバイス上で呼び出されていない可能性があります)?

答えて

0

AsyncStorage docsの例の後、私はそれを動作させる方法を考え出しました。減速機能で次に

var STORAGE_KEY = '@AppName:state'; 

export function loadState() { 
    return async (dispatch, getState) => { 
    try { 
     var value = await AsyncStorage.getItem(STORAGE_KEY); 
     if (value !== null) { 
     dispatch(replaceState(value)); 
     console.log('Recovered selection from disk:'); 
     console.log(value); 
     } else { 
     saveState(JSON.stringify(initialState.toJS())); 
     console.log('No state on disk. Initialized with initialState.'); 
     } 
    } catch (error) { 
     console.log('AsyncStorage error: ' + error.message); 
    } 
    }; 
} 

function replaceState(newState) { 
    return { 
    type: REPLACE_STATE, 
    newState: fromJS(JSON.parse(newState)), 
    }; 
} 

async function saveState(state) { 
    try { 
    await AsyncStorage.setItem(STORAGE_KEY, state); 
    console.log('Saved selection to disk:'); 
    console.log(state); 
    } catch (error) { 
    console.log('AsyncStorage error: ' + error.message); 
    } 
} 

case SET_UPDATED_DATE: 
    newState = state.set('updatedDate', action.date); 
    saveState(JSON.stringify(newState.toJS())); 
    return newState; 
私の減速ファイルでは(私のReduxの状態はImmutable.jsオブジェクトです)
関連する問題