React native 无法使用async生成Expo联系人的平面列表

React native 无法使用async生成Expo联系人的平面列表,react-native,expo,React Native,Expo,我正在尝试设置expo contacts以生成设备上的联系人列表。然而,我没有理解和实施它 下面的代码没有对useEffect进行任何更改,并且输出仅保持为“空” import React,{useffect}来自“React”; 从“react native”导入{视图、文本、样式表} 从“react native”导入{PermissionsAndroid}; 从“世博会联系人”导入*作为联系人; 从“反应本机手势处理程序”导入{FlatList}; 从'react/cjs/react.de

我正在尝试设置expo contacts以生成设备上的联系人列表。然而,我没有理解和实施它

下面的代码没有对useEffect进行任何更改,并且输出仅保持为“空”

import React,{useffect}来自“React”;
从“react native”导入{视图、文本、样式表}
从“react native”导入{PermissionsAndroid};
从“世博会联系人”导入*作为联系人;
从“反应本机手势处理程序”导入{FlatList};
从'react/cjs/react.development'导入{useState};
导出默认功能联系人(){
let[contacts,setContacts]=useState(null)
让联系人=“”
useffect(()=>{
(异步()=>{
const{status}=wait Contacts.requestPermissionsAsync();
如果(状态==‘已授予’){
const{data}=await Contacts.getContactsAsync({
字段:[联系人.字段.电子邮件],
});
如果(data.length>0){
联系人=数据[0];
设置联系人(数据)
}
}
})();
}, []);
让输出='empty'
useffect(()=>{
如果(联系人){
输出='updated'
}否则{
输出='仍然为空'
}
},[联系人])
返回(
{output}
);
}
任何指导都将不胜感激。谢谢,这很容易

以下是工作示例:

扫描Expo Go应用程序中的二维码,查看其是否正常工作

import React,{useffect,useState}来自“React”;
从“react native”导入{样式表、视图、文本、平面列表、按钮};
从“世博会联系人”导入*作为联系人;
导出默认函数App(){
const[contacts,setContacts]=useState([]);
const fetchContacts=async()=>{
const{status}=wait Contacts.requestPermissionsAsync();
如果(状态==‘已授予’){
const{data}=await Contacts.getContactsAsync({
字段:[Contacts.fields.email,Contacts.fields.phonenumber],
});
console.log(数据[0])
设置联系人(数据);
}
};
返回(
{('获取的联系人总数:',Contacts.length)}
{
返回{item?.name};
}}
/>
);
}
const styles=StyleSheet.create({
容器:{
弹性:1,
背景颜色:“#fff”,
玛金托普:24,
},
});
import React, {useEffect} from 'react';
import { View, Text, StyleSheet } from 'react-native'
import { PermissionsAndroid } from 'react-native';
import * as Contacts from 'expo-contacts';
import { FlatList } from 'react-native-gesture-handler';
import { useState } from 'react/cjs/react.development';

export default function Contacts(){

let [contacts, setContacts] = useState(null)

let contact = ''
useEffect(() => {
    (async () => {
      const { status } = await Contacts.requestPermissionsAsync();
      if (status === 'granted') {
        const { data } = await Contacts.getContactsAsync({
          fields: [Contacts.Fields.Emails],
        });

        if (data.length > 0) {
          contact = data[0];
          setContacts(data)
        }
      }
    })();
  }, []);

  let output = 'empty'
  useEffect(() => {
    if(contacts){
        output = 'updated'
    }else{
        output = 'still empty'
    }
  }, [contacts])

  return (
    <View>
        <Text>{output}</Text>
    </View>
  );
}