неопределенный не является объектом (вычисляется ‘_reactNativeContacts.default.GetAll’)

#android #react-native #hyperlink #expo #react-native-contacts

#Android #реагировать-родной #гиперссылка #выставка #реагировать на собственные контакты

Вопрос:

Я пытаюсь использовать react-native-contacts с приложением react-native, созданным с помощью Expo, но у меня есть это сообщение об ошибке :

undefined is not an object (evaluating '_reactNativeContacts.default.getAll')

Вот код, который я использую :

 import React from 'react';
import {
  Image,
  Platform,
  ScrollView,
  StyleSheet,
  Text,
  TouchableOpacity,
  View,
  Modal,
  TouchableHighlight,
  ImageBackground,
  TextInput,
  Picker,
  PermissionsAndroid
} from 'react-native';
import { WebBrowser } from 'expo';
import Contacts from 'react-native-contacts';

import { MonoText } from '../components/StyledText'; 


  Contacts.getAll((err, contacts) => {
    if (err === 'denied'){
      // error
    } else {
      // contacts returned in Array
    }
  })
  

Я попытался выполнить все шаги для установки на этой странице для части Android :
https://github.com/rt2zz/react-native-contacts#getting-started

Но я не нахожу, где я могу выполнить эту часть: я не знаю, где я могу найти этот файл: android/settings.gradle

Кстати, я попробовал эту команду «react-native link» в каталоге моего приложения, и ничего не изменилось.

 Android
In android/settings.gradle
...
include ':react-native-contacts'
project(':react-native-contacts').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-contacts/android')
In android/app/build.gradle
...
dependencies {
    ...
    implementation project(':react-native-contacts')
}
  

У кого-нибудь была такая проблема?
Спасибо за помощь!

Ответ №1:

Насколько я понимаю, вы разрабатываете свое приложение с помощью Expo. Некоторые независимые библиотеки плохо работают с Expo. У меня есть два предложения для вас.

  1. Если вы хотите продолжать использовать react-native-contacts, вам необходимо извлечь свое приложение из Expo
  2. Или напрямую используйте API контактов Expo, вы можете найти подробную информацию по этой ссылке Контакты Expo Я бы сделал это, что требует от вас меньше работы, и решил вашу проблему

     import { Contacts } from 'expo';
    
    const { data } = await Contacts.getContactsAsync({
        fields: [Contacts.Fields.Emails],
    });
    
    if (data.length > 0) {
        const contact = data[0];
        console.log(contact);
    }
      

Вы можете найти ту же проблему, созданную на странице react-native-contacts github. Проблема

Комментарии:

1. Большое спасибо! Это, скорее всего, означает, что вы не можете использовать другие библиотеки:-/ Вы знаете способ ski expo?

2. Вам нужно извлечь свой проект expo с помощью expo eject . Я бы не рекомендовал вам извлекать, если вам не нужно писать собственные коды. Вы можете прочитать здесь подробнее. docs.expo.io/versions/v32.0.0/expokit/expokit

3. Спасибо! На данный момент я пойду с expo! Большое спасибо!

Ответ №2:

Обновление за июль 2021

Contacts Модуль был перемещен из основного expo пакета в expo-contacts (см. Документацию).

Пример:

 import * as Contacts from 'expo-contacts';

const { status } = await Contacts.requestPermissionsAsync();

if (status === 'granted') {
  const { data: contacts } = await Contacts.getContactsAsync();

  console.log('Retrieved contacts!', contacts);
}