在本机反应中擦除 AsyncStorage
Posted
技术标签:
【中文标题】在本机反应中擦除 AsyncStorage【英文标题】:Wipe AsyncStorage in react native 【发布时间】:2017-01-13 17:20:34 【问题描述】:我注意到我浪费了一定的时间来调试 redux 操作,我在 react-native 中坚持到 AsyncStorage
感谢redux-persist。有时我只想擦除 AsyncStorage 以节省一些开发时间并尝试使用新数据。
编辑:最好的情况下,解决方案应该适用于模拟器和真实设备、ios 和 android。可能针对不同的平台有不同的解决方法。
谢谢
【问题讨论】:
你可以试试 react-native-dev-button。小添加,正是您需要的。我实际上将 redux-persist 中的 purge() 添加到 clearActions 并在需要时使用它。 【参考方案1】:尝试使用 clear() 函数删除所有客户端、库等的所有 AsyncStorage
【讨论】:
这需要一个非常小的实现,听起来不错。window
对象或类似的东西下是否有全局辅助方法?
@jsdario 在调试器模式下是 $reactNative。请看我的回答。
上面嵌入的不行!因此,请使用此更新的 API 文档链接获取clear() 函数【参考方案2】:
clearAsyncStorage = async() =>
AsyncStorage.clear();
这个函数可以在代码库的任何地方应用来清除AsyncStorage
。例如,这是在 <Button>
组件上调用它的方法。
<Button onPress=this.clearAsyncStorage>
<Text>Clear Async Storage</Text>
</Button>
【讨论】:
在 Stack Overflow 上通常不鼓励仅代码的答案,因为它们通常不是很清楚。请考虑更新此答案,简要说明您正在做什么、它是如何工作的以及指向相关文档的链接。 我只是认为对于新手开发人员来说,拥有一个清除 AsyncStorage 的就绪函数可能会很有用。对于更有经验的开发人员来说,阅读上述答案和 cmets 可能就足够了【参考方案3】:您无需接触源代码即可轻松清除 AsyncStorage。使用react native debugger;并在 devtools 控制台输入
$reactNative.AsyncStorage.clear();
或者用clear()
在RN的正常调试器中调用它,你可以把它放在...
if (__DEV__)
global.clear = () =>
AsyncStorage.clear().then(() => console.log('Cleared'))
【讨论】:
如果你想验证你已经清除了你的密钥,你可以运行$reactNative.AsyncStorage.getAllKeys().then(data => console.log(data));
在你运行上面的命令表单react native debugger之后列出你的密钥。【参考方案4】:
恕我直言,所有提到 AsyncStorage.clear() 的答案都是错误的,因为正如 documentation 所说:
删除所有客户端、库等的所有 AsyncStorage。您可能 不想这样称呼;使用 removeItem 或 multiRemove 仅清除 您应用的密钥。
正确答案在here:
这是一个简单的方法:
clearAllData()
AsyncStorage.getAllKeys()
.then(keys => AsyncStorage.multiRemove(keys))
.then(() => alert('success'));
【讨论】:
docs 说clear()
也同样工作 /** * Erases all AsyncStorage for all clients, libraries, etc. You probably don't want to call this. * Use removeItem or multiRemove to clear only your own keys instead. */ clear(callback?: (error?: Error) => void): Promise<void>;
我很困惑 Yossi:递归删除 all 键与在实践中清除 all AsyncStorage 不同?【参考方案5】:
redux-persist
带有一个 purge()
回调。如果你愿意的话,你可以在调试菜单中调用它。
【讨论】:
这是对上一个答案的总结,对吧?我会检查这两种方法并尝试在两种答案之间做出改变。 我已经验证了另一个答案,因为 AsyncStorage 始终可以通过import from 'react-native'
获得。它非常方便。【参考方案6】:
使用 AsyncStorage 给我带来了参考错误:
ReferenceError: AsyncStorage is not defined
我终于在 React Native Debuguer documentation 中找到了一个提及
$reactNative.*
(对于 RN >= 0.56)
这意味着这个 sn-p 清除了我所有的本地存储:
clearAllData = () =>
$reactNative.AsyncStorage.getAllKeys()
.then(keys => $reactNative.AsyncStorage.multiRemove(keys))
.then(() => alert('success'));
那就clearAllData();
【讨论】:
以上是关于在本机反应中擦除 AsyncStorage的主要内容,如果未能解决你的问题,请参考以下文章