是否可以在Redux中使SQLite请求异步?文档中的实现不是异步的,因为dispatch(onLoading(false))
是在所有DB插入之前激发的。
操作
const saveData = async () => {
await dispatch(onLoading(true));
await dispatch(saveSQL('DROP TABLE "bepr_problematiky"'));
await dispatch(
saveSQL(
'CREATE TABLE "bepr_problematiky" ( "id" integer NOT NULL, "uid" integer DEFAULT NULL, "title" varchar(255) NOT NULL, "text" text NOT NULL, "file" varchar(255) NOT NULL );'
)
);
for (const insert of inserts) {
await dispatch(
saveProblematiky(
`INSERT INTO 'bepr_problematiky' VALUES(${insert.id}, ${insert.uid}, '${insert.title}', '${insert.text}', '${insert.file}');`
)
);
}
return await dispatch(onLoading(false));
};
组件
export const saveSQL = (sql: string) => {
return async (dispatch: Dispatch<ProblematikyInterface>) => {
await db.transaction(async (tx) => {
await tx.executeSql(sql, [], (tx, results) => {
dispatch({
type: 'LOAD_PROBLEMATIKY',
payload: []
});
console.log('Saved');
});
});
};
};
如果您使用SQLite进行react native,我建议使用WatermelonDBhttps://nozbe.github.io/WatermelonDB/因为它是一个基于SQLite构建的库,并且具有许多其他功能。
至于你的问题——如果我没有错的话,你希望在函数中有一个等待插入数据库调用,这样你就可以操纵UI状态的加载条件,对吧?
我相信你可以使用redux-thunk,因为它解决了redux的异步操作。https://redux.js.org/tutorials/essentials/part-2-app-structure#writing-带有thunks的异步逻辑(本例使用redux工具包)
我希望它能有所帮助。如果你已经有了答案,一定要把它分享出来。谢谢干杯