在本机反应中擦除 AsyncStorage

Posted

技术标签:

【中文标题】在本机反应中擦除 AsyncStorage【英文标题】:Wipe AsyncStorage in react native 【发布时间】:2017-01-13 17:20:34 【问题描述】:

我注意到我浪费了一定的时间来调试 redux 操作,我在 react-native 中坚持到 AsyncStorage 感谢redux-persist。有时我只想擦除 AsyncStorage 以节省一些开发时间并尝试使用新数据。

编辑:最好的情况下,解决方案应该适用于模拟器和真实设备、iosandroid。可能针对不同的平台有不同的解决方法。

谢谢

【问题讨论】:

你可以试试 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 =&gt; 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) =&gt; void): Promise&lt;void&gt;; 我很困惑 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的主要内容,如果未能解决你的问题,请参考以下文章

在单个链表线程中擦除和插入是不是安全?

从向量中擦除指针

在 std::vector 中擦除、调试、发布

击败从内存中擦除 PE

为啥在Visual Studio中擦除位置之前矢量的c ++迭代器也无效?

在opencv 3.0中擦除图像的阴影[关闭]