我们有一个用React-Native编写的移动应用程序,我们使用了本指南中的模块React-native-contact:https://github.com/rt2zz/react-native-contacts
该应用程序的目的是将数字的前缀从XXX更改为YYY。
联系人人口密集,一切正常。但是,我们希望更新联系人的1个特定号码,但不幸的是,它正在更新此联系人的所有号码。我们可以通过以下代码获取联系簿中的联系人列表:
handleUpdate = () => {
//phoneContacts => all the contacts found in the address book
//contactDetails => all the contacts that have the prefix number that needs to be replaced.
//prefixNumber => is the prefix number that user wants to replace.
const { phoneContacts, contactDetails, prefixNumber } = this.state;
var updated_select = 0;
var record = null;
Contacts.getAll( (err, contacts) => {
_.forEach(contactDetails, (contactD) => {
if (contactD[1] == true) {
//where contactD[5] is the specific phone number
var num = contactD[5];
num = num.replace(prefixNumber, '010');
_.forEach(contacts, (cont) => {
if (cont.recordID === contactD[0])
//finding the record to be updated in the Contact List
record = cont;
});
//Replacing the record phone numbers with the updated one.
record.phoneNumbers[contactD[3]] = { label: contactD[4], number: num };
//Updating the contacts as per the guide linked above
Contacts.updateContact(record, (err) => {
if (err) {
_alert('error', 'Application error: Update unsuccessful.');
return;
}
});
++updated_select;
}
});
ToastAndroid.show(updated_select + ' rows have been updated', ToastAndroid.SHORT);
this.handleSearchContacts();
return;
});
}
所以作为一个具体的例子。我们正在将前缀号码从555更改为010 如果用户X有
phoneNumbers: [
{label: "work",number: "(555) 555-5555"},
{label: "mobile",number: "(444) 444-4444"},
],
在更新时,应用程序正在将用户X的两个号码更新为:
phoneNumbers: [
{label: "work",number: "(010) 555-5555"},
{label: "work",number: "(010) 555-5555"},
],
我们还尝试推送所有值,包括更新的记录,但所有数字都在更新。
在调试过程中,我们验证了变量记录的值,它显示了与所有详细信息的联系,并且具体更新了特定的电话号码。
有什么想法吗?