redux-thunk 应该管理设备上的数据加载和保存吗?



我在我的反应原生项目中使用 redux-thunk,我面临着我不知道如何最好地处理它的情况。

当一个动作被调度时(作为一个函数,所以redux-thunk首先处理它(,我需要做两件事:首先是用一个值更新Redux存储;其次,是使用本地存储选项(AsyncStorage,SecureStore从Expo等(将值保存在设备上。

在其他一些情况下,我需要从设备检索数据,并更新 Redux 存储。异步加载数据是使用 redux-thunk 的主要目的,所以我想这很好。

但是,redux-thunk是否也应该管理设备上的数据保存?

在我看来,保存数据是主要应用程序逻辑的一部分;使 redux-thunk 保存数据会使此任务成为应用程序状态逻辑,这似乎是不正确的。

你们怎么看?

好吧,我已经启动了许多不同的 react 项目,redux-thunk处理AsyncStorage我还没有遇到任何重大问题。我想这将归结为你更舒服的东西;因为无论哪种方式,它都将在同一线程上运行。

根据我的个人经验,我喜欢将所有逻辑保存在同一个地方,而不是重复任何代码,这是将redux-thunk添加到状态管理的动机之一。

最后,请记住,在加载和渲染时,您始终可以使用简单的状态dispatch,即:isLoad'来处理所有不同的加载和渲染异步任务。 (:

让我们看一些代码:

export const signin = (username, password) => {
return async (dispatch, getState) => { 
dispatch({type: SIGN_IN_START,  isLoading: true, })
// please DONT use this in real life and make sure to encrypt username and passwords!
// Use tokens, tokens are beautiful 
await axios.get('http://someauth.com/user='.concat(username)}).then(async function (res) {
if (res.data[0] !== null){
await AsyncStorage.setItem('@myData', JSON.stringify(res.data[0]))
dispatch({type: SIGN_IN_SUCESS, isLoading: false, })
}
else{
dispatch({type: SIGN_IN_FAILURE, isLoading: false,  error: err})
}
}).catch(function (err){
dispatch({type: SIGN_IN_FAILURE, isLoading: false,  error: err})
})
}
}

对于此示例,我可以将SIGN_IN_START设置为将加载状态设置为 true,SIGN_IN_SUCESSSIGN_IN_FAILURE以恢复我的应用程序。

最新更新