Передача объектов iOS в React Native - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть объект employeeList, который содержит объекты employee, а затем у каждого объекта сотрудника есть объект person и address, и person and address оба содержат NSString свойства и некоторую функциюнапример, calculateAge().

Я хочу передать этот employeeList объект с нативной стороны на реакционную нативную сторону, но он будет иметь нулевое значение, поскольку мост RN будет отправлять только конфиденциальные типы данных.

https://facebook.github.io/react-native/docs/native-modules-ios#argument-types

Как лучше всего преобразовать employeeList в объект JSON или вложенную карту, чтобы его можно было просматривать на стороне RN?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Вы не можете отправить через мост objects с вложенными функциями как свойства того же object.Но вы можете отправлять собственные функции / методы , объявленные в модуле, построенном самостоятельно, в Objective-C или Swift.

Я бы порекомендовал вам экспортировать функцию calculateAge() в собственный модуль.Эта функция получает в качестве параметра объект JSON employee a, который возвращает желаемый возраст этого сотрудника, используя обратные вызовы или отправляя события , хотя я бы использовал конструкцию с Promises для этого.Также эта функция может быть вызвана, когда вы хотите на стороне JS.Однако записывать такого рода функции на встроенном модуле не имеет смысла, поскольку вы можете выполнять ту же логику на стороне JS.

Экспорт функции в собственный модуль был бы полезен, если для логики требуются дополнительные данные, которые выполняются только на собственной стороне.

Наконец, убедитесь, что вы экспортируете object (NSDictionary) со строкой ключи и значения любого типа из этого списка .Поэтому вам нужно преобразовать объект employeeList в объект JSON и удалить из него вложенные функции, чтобы избежать проблем совместимости.

0 голосов
/ 15 декабря 2018

Я не очень хорош в создании методов Objective-C для нативных компонентов.Но из документов мы можем видеть:

Тип возвращаемых методов моста всегда void.React Native bridge является асинхронным, поэтому единственный способ передать результат в JavaScript - использовать обратные вызовы или отправку событий (см. Ниже).

Так что я думаю, что самым простым вариантом будет использованиефункция обратного вызова для отправки данных на сторону JS.

Итак, что-то вроде этого должно быть в вашем файле .m.

RCT_EXPORT_METHOD(getEmployeeList:(RCTResponseSenderBlock)callback)
{
  NSArray *employeeList = ... (*)
  callback(@[[NSNull null], employeeList]);
}

(*) employeeList, я бы предположил, что это будет массив словарей.Отображение ваших данных в цикле, так что все сотрудники будут проходить итерации, прежде чем они будут добавлены в employeeList.Поскольку я не знаю ваших структур данных, я думаю, что вы сможете это придумать.Функция вычисления возраста, которую вам, возможно, придется реализовать на стороне JS, поскольку я не думаю, что вы можете передать функцию как часть словаря.

Тогда вы могли бы использовать что-то подобное на стороне JS, чтобызахватить данные.

NativeModules.EmployeeModule.getEmployeeList((error, employees) => {
  if(error) {
    console.error(error);
  } else {
    this.setState({employees});
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...