2016-05-16 45 views
7

我正在尋求將脫機支持添加到React Native應用程序。該應用程序當前運行由Postgres數據庫支持的API。對React Native應用程序的脫機支持

我已經在使用NetInfo來確定用戶是否有連接,但我希望瞭解添加脫機功能的最佳方式,用戶可以繼續更新他們的數據和信息,再次獲得連接。

看起來像pouchdb/couchdb解決方案通常是推薦 - 但是,我根本不想改變我的數據庫。理想情況下,我希望有某種方式將API調用的「作業」存儲在隊列中,然後在連接恢復後執行它們。

要在React本機應用程序上獲得此脫機功能,最好的方法是什麼?

提前致謝!

+0

你用什麼來管理你的應用程序狀態? –

+0

目前使用助焊劑 – Karim

+1

如果您使用的是Redux,則可以使用此庫使您的狀態可以脫機使用:https://github.com/rt2zz/redux-persist –

回答

4

您可以使用例如通常用於數據存儲的redux。假設你有一個LOAD_POSTS_DATA作用,其組件可以開火的時間點,你可以使用AA減速這樣的:

export const LOAD_POSTS_DATA = 'LOAD_POSTS_DATA'; 
var connected = ... // filled by NetInfo 

const initialState = { 
    data: [], 
}; 

export default function reducer(state = initialState, action) { 
    switch (action.type) { 
    case LOAD_POSTS_DATA: 
     if (connected) { 
     return { 
      open: true, 
     }; 
     } 

     return state; 

    default: 
     return state; 
    } 
} 

export function load() { 
    return { 
    type: LOAD_POSTS_DATA, 
    }; 
} 

這不僅沒有加載數據,對於推遲你會寫第二減速器像這樣的:

const CLEAR_QUEUE = 'CLEAR_QUEUE'; 
import { LOAD_POSTS_DATA } from './otherReducer'; 
var connected = ... // filled by NetInfo 

const initialState = { 
    queue: [], 
}; 

export default function reducer(state = initialState, action) { 
    switch (action.type) { 
    case LOAD_POSTS_DATA: 
     if (!connected) { 
     var q = state.queue; 
     q.push(action); 

     return { 
      queue: q, 
     }; 
     } 

     return state; 

    case CLEAR_QUEUE: 
     return { 
     queue: [] 
     } 

    default: 
     return state; 
    } 
} 

// needs to be called as soon as you go back only 
// requires redux-thunk 
export function getOperations() { 
    return (dispatch, getState) => { 
    const { thisReducer: { queue } } = getState(); 
    queue.forEach(action => dispatch(action)); 

    return { 
     type: CLEAR_QUEUE, 
    }; 
    }; 
} 

第二個門店每延遲的操作(需要從其他減速進口),並使用redux-thunk得到的行動保持並儘快派遣他們爲你重新聯機。

1

看看領域:https://realm.io,你可以在你的應用程序中使用它作爲數據庫,然後只要你有連接,你可以同步數據。

相關問題