为什么我不能在App.js的自定义挂钩中调用第二个函数?

时间:2020-09-15 14:57:42

标签: javascript reactjs react-native

我正在尝试在React Native应用中实现AsyncStorage。我编写了一个自定义钩子,以处理与保存到AsyncStorage和从AsyncStorage中读取有关的所有逻辑。

第一个自定义函数saveData起作用。第二个readData非常难以使用。我插入到函数中的console.log中没有一个显示在我的终端中,因此即使它被正确调用也没有被使用(或者至少我有99%的把握正在被使用) (准确地调用)在useEffect的{​​{1}}中,这是我的应用程序的入口点。

我可以看到,在App.js的{​​{1}}上,line 12是一个承诺。您可以在注释掉的代码中看到我处理数据的位置,以便实际上可以读取AsyncStorage中存储的语言,这是我的目标。但是我想做的是:

  • 在我的自定义钩子中具有与读取和保存数据有关的所有逻辑。目前,我只能从App.js内部读取数据,这不是我想要的。

我非常感谢有关如何移动逻辑的想法,这样我就不必从currentLanguage处理Promise,而可以从{ {1}}。

这是我的自定义钩子的代码:

App.js

这是我的App.js中的代码:

readData

非常感谢所有帮助!

1 个答案:

答案 0 :(得分:2)

const [readData] = useLocalStorage();

您仅访问数组的第一个元素,即saveData函数(尽管您为变量命名)。 readData是第三名。

const [saveData, error, readData] = useLocalStorage();

或者,如果要按名称访问函数,则需要更改钩子以返回对象而不是数组:

// At the end of the hook:
return { saveData, errorMessage, readData };

// In your component:
const { readData } = useLocalStorage();