Сортировка контактов в алфавитном порядке в React-Native

#react-native

#react-native

Вопрос:

В настоящее время я работаю над мобильным приложением. Мне нужно перенести контакты со своего телефона в приложение, которое я создаю (я использую expo contacts). По какой-то причине вместо того, чтобы сортировать контакты в алфавитном порядке, они отображаются в случайном порядке.

Я не совсем уверен, как сортировать контакты, чтобы отображать их в алфавитном порядке.

Может кто-нибудь, пожалуйста, взглянуть и сообщить мне, что я делаю не так / что я должен добавить?

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

 // load contacts from phone

_loadContacts = async () => {
    try {
      await Permissions.askAsync(Permissions.CONTACTS);
      const { data: contacts } = await Contacts.getContactsAsync({ fields: [Contacts.Fields.PhoneNumbers] })


 // for rendering contacts 

  _renderContact = ({ item: { firstName, lastName, name, phoneNumbers } }) => (
    <View style={styles.contact}>
      <Text style={styles.contactName}>{name || [firstName, lastName].join(" ")}</Text>
      <Text style={styles.phoneNumbers}>📞 {phoneNumbers ? phoneNumbers.map(entry => entry.number).join(", ") : "undefined"}</Text>
    </View>
  )
  

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

1. Какова структура данных контактов??

Ответ №1:

Можно сортировать контакты с помощью Expo. Это было добавлено в августе 2018 года. https://expo.canny.io/feature-requests/p/sorting-options-for-contacts

Если вы проверите документацию, вы увидите, что для этого getContactsAsync требуется ContactQuery .

ContactQuery (смотрите здесь) занимает SortType (смотрите здесь), позволяя сортировать контакты либо по имени, либо по фамилии.

Простым примером может быть следующий.

  const { data: contacts } = await Contacts.getContactsAsync({ 
    fields: [Contacts.Fields.PhoneNumbers], 
    sort: Contacts.SortTypes.FirstName 
 });
  

Стоит отметить, что в настоящее время SortType это только доступно для Android. Итак, для iOS вам нужно будет отсортировать их в нужном вам порядке самостоятельно.