我有这个函数:
const submitImport = async (value) => {
const { actions, navigation, account } = this.props;
this.setState({ isImporting: true });
actions.importWallet(value.mnemonicPhrase, value.password, 1);
console.log('acc', account);
actions.showNotification({
message: 'Account has been successfully Imported',
isError: false,
});
};
importWallet
正在向account
对象添加新属性,但当我第一次调用此函数时,account
对象为空,但当第二次单击它时,它是可以的。所以我猜测importWallet
需要时间来完成并返回值。我尝试使用async
await
,但没有成功。此外,我尝试使用return new Promise
,但它仍然不起作用。也许我做错了。
关于如何解决这个问题,有什么建议吗?
我假设importWallet
函数会导致account
道具发生一些变化。
所有道具更改都需要至少一个渲染周期,更新后的值才能可见,因为state/prop
更改在react中是异步的。在您的情况下,您试图在调用actions.importWallet
后立即访问account
。因此,由于它位于同一渲染中,因此尚未更新。但正如您所提到的,它将在后续渲染中可用。
此外,由于react状态更新的异步性质没有公开,因此不能使其与async wait/promise同步。
你的用例可以通过一些折射器来实现:
-
尝试在
account.importWallet
的返回语句中获取account的新值。这样你甚至可以在道具更新之前使用它。const updatedAccount=actions.importWallet(value.mnemonicPhrase,value.password,1(;
-
如果使用React Hooks,可以使用
useEffect
创建效果,并添加account
作为依赖项。这将在依赖项值更改时调用效果(依赖项应该是一致效果调用的基元数据类型(。