Coś naprawdę prostego, ale nie zrozumiałem. Po otrzymaniu kontaktów, jak mogę używać ich do wypełnienia listy? Zawsze dostaję Can't find variable: contacts
import * as Contacts from "expo-contacts";
const ContactsScreen = props => {
useEffect(() => {
(async () => {
const { status } = await Contacts.requestPermissionsAsync();
if (status === "granted") {
const { data } = await Contacts.getContactsAsync({
fields: [Contacts.Fields.Emails]
});
if (data.length > 0) {
const contact = data[0];
console.log(contact);
}
}
})();
}, []);
return (
<View >
<Text>Contacts Module</Text>
<FlatList
data={contact}
keyExtractor={contact.id}
renderItem={({ item }) => (
<ContactItem
firstName={item.firstName}
/>
</View>
);
};
export default ContactsScreen;
Myślę, że to naprawdę proste, po prostu nie rozumiem
2 odpowiedzi
Musisz zachować kontakty w stanie komponentu. Tak więc za każdym razem, gdy zmienisz swój stan, Twój komponent będzie się oddać, a zobaczysz zaktualizowane dane. Zmień kod z poniższą. Nie zapomnij zaimportować useState
.
import * as Contacts from "expo-contacts";
const ContactsScreen = props => {
const [myContacts, setMyContacts] = useState([]);
useEffect(() => {
(async () => {
const { status } = await Contacts.requestPermissionsAsync();
if (status === "granted") {
const { data } = await Contacts.getContactsAsync({
fields: [Contacts.Fields.Emails]
});
if (data.length > 0) {
setMyContacts(data);
}
}
})();
}, []);
return (
<View >
<Text>Contacts Module</Text>
<FlatList
data={myContacts}
keyExtractor={item => item.id}
renderItem={({ item }) => (
<Text>{item.firstName}</Text>
)}
/>
</View>
);
};
export default ContactsScreen;
Odpowiedz z mojego komentarza:
Myślę, że to może być z zakresu zmiennej, może to być, że rn nie wie, że istnieje, ponieważ istnieje tylko w funkcji. Myślę, że możesz utworzyć stan, a następnie przypisać wartości z kontaktu do stanu iw wywołaniu mieszkaniowym data ={ this.state.contact}
.
Lub za pomocą haków takich jak ty:
if (data.length > 0) {
setContact(data);
}
I zadzwoń do flatlist:
data={myContact} // if named so in state declaration
Podobne pytania
Nowe pytania
react-native
React native to biblioteka JavaScript używana do tworzenia natywnych aplikacji mobilnych przy użyciu React. React Native skupia się na wydajności programistów na wszystkich platformach, na których Ci zależy - ucz się raz, pisz gdziekolwiek.