我有一个使用AWS Amplify构建的Reaction原生应用程序.在这里,我有一个自定义身份验证流,创建一个Cogito用户和一个发布确认lambda触发器,创建一个真正的DynamoDB用户.但当我想在我的应用程序主屏幕中查询这个真实用户时,问题就出现了.目前我是这样做的,我首先从Cogito获得当前认证的用户,然后从收到的数据中查询真实的数据库用户,但有时一开始这无法获得用户,但当我刷新屏幕时,我会得到用户.我想知道做这件事最好的方法是什么?

我的代码是,

import { Auth } from "aws-amplify";
import { DataStore} from '@aws-amplify/datastore';
import { User } from "../src/models";

const [user , setUser] = useState <User[]>([]);
const [ready, setReady] = useState(false);

const getUser = async () => {

try{
    const userData = await Auth.currentAuthenticatedUser();
    const currentUserPhone = userData.attributes.phone_number
    
    if(currentUserPhone){  
     await DataStore.query(User, d => d.Phonenumb("eq", currentUserPhone)).then(setUser);
     console.log("getting user in home");
     setReady(true);
    } else{
     setReady(false);
    }
  } catch(e){
    setReady(false);
    console.log(e)
  }

}

useEffect(() => {
    
  getUser();
     
}, []);

return(

<View>
 {ready === true &&(<Text>Hello {user?.name}</Text>)}
 {ready === false &&(<Text>No user</Text>)}
</View>

)

推荐答案

确保在查询之前同步数据.拨打start,收听ready事件.

await DataStore.start();
Hub.listen('datastore', (data) => {
  const  { event } = data.payload;
  if (event === "ready") {
    // TODO
  }
})

React-native相关问答推荐

无法设置文本输入参考

为什么当键盘出现在react native 时我的按钮会上升?按钮视图位置是绝对的?

react native :navigationOptions 中的标题样式不起作用

找不到变量 atob

如何实时从 react-native-camera 获取帧

React Native 开发中的/ios/index/DataStore文件夹是什么

如何在 Crashlytics (Fabrics) 中有效地对非致命异常进行分组?

使用 react-native 设置 Select 器的高度

如何在 react-native 中在子级和父级之间传递数据?

因 JVM 堆空间耗尽而导致守护进程到期?

如何从 stack.navigation 外部的组件中使用 navigation.navigate

错误:无法解析模块`buffer`

如何删除不需要的expo 模块

Animated.View 的样式props的Typescript定义

expo 已过期卸载并再次运行以升级

Android 是否支持 React Native 的 LayoutAnimation?

React Navigation 切换背景 colored颜色 和样式 StackNavigator

python 3与本机兼容吗?还是我应该按照 react 文档的建议安装 python 2?

React Native <>(空)组件到底是什么

Flatlist getItemLayout 用例