【发布时间】:2019-09-14 20:14:44
【问题描述】:
大家好,
我正在做一个 react-native 项目,我使用 AsyncStorage 来保存我的一些数据,这些数据不需要完全成熟的数据库。 在这方面,我在使用此功能时遇到了一些问题,主要是 AsyncStorage 的多集静态方法。 我在 redux 操作中使用了 multiset,但由于某种原因,尽管正确调用了该操作,但它仍无法正常工作,而更奇怪的是它与另一个操作一起工作。
这是有效的操作:
export const saveChosenCompany = (username, company) => dispatch => {
AsyncStorage.multiSet([
[`${username}.companyID`, company.id],
[`${username}.companyName`, company.name]
])
.then(() => {
dispatch({
type: SAVED_COMPANY,
payload: company
})
})
.catch(err => {
console.log(err);
dispatch({
type: SAVED_COMPANY,
payload: {
id: null,
name: null
}
})
})
}
这是无法正常工作的操作:
export const saveConfigs = (configs) => dispatch => {
console.log("action", configs)
AsyncStorage.multiSet([
[`updateStockpile`, configs.stockpile],
[`updateData`, configs.data],
[`emptyPhone`, configs.emptyPhone],
[`language`, configs.language],
[`autoUpdate`, configs.autoUpdate],
])
.then(() => {
console.log("set async...")
dispatch({
type: SAVE_CONFIG,
payload: configs
})
})
.catch(err => {
console.log(err);
console.log('no async set...')
})
}
这是我在组件中实现它的方式:
saveChangedConfigs = async () => {
this.props.saveConfigs({
stockpile: this.state.updateItem.toString(),
data: this.state.updateData.toString(),
delete: this.state.emptyFiles.toString(),
autoUpdate: this.state.autoUpdate,
language: this.state.language
})
}
我从本地选择器的 onChange 属性、本地开关和同名库中的 react-native-numeric-input 自定义组件中调用此方法。
我希望这里的一些人能帮助我弄清楚为什么多重集不起作用(我通过获取值对其进行了测试,但它们都是空的)。
提前感谢大家的时间和麻烦。
【问题讨论】:
-
你在控制台中得到了什么?
-
尝试在
AsyncStorage.multiSet中使用async/await -
你怎么打电话给
saveChosenCompany(哪个有效)? -
@Vencovsky 我得到了在多集之前执行的 console.log 并且不能在 redux 操作中使用异步等待,因为 redux 不支持它,或者至少这是我得到的错误时我试过了
-
@Dan 我通过调用 this.saveChosenCompany() 在选取器 onValueChange 方法中使用它
标签: javascript reactjs react-native redux asyncstorage