У меня есть функция для получения данных из firebase, и я хочу установить данные в состояние после получения, поэтому я просто объявляю массив и помещаю в них все данные, после чего я setState этого массива с моим состоянием

Но когда я регистрирую это состояние или визуализирую его, у меня возникают проблемы с RN 0.61.2. В RN 0.58.0 все работает идеально, я не знаю, почему и как!!!

Когда я регистрирую состояние, я просто вижу переоцененные данные «У меня всего 4 элемента в БД», но регистратор печатает мне более десятков, и когда я просто отображаю эти данные «состояние», они говорят мне

Значение JSON «5» типа NSNumber не может быть преобразовано в Nsstring

Итак, как мне этого избежать?

Вот мой фрагмент кода

  this.state = {
      RecommendedProviders: [],
}

componentDidMount() {
      this._recommendedProvider();
}

_recommendedProvider = () => {
    let Recommended = [];
    firebase
      .database()
      .ref('recommendationProviders')
      .once('value')
      .then(snapshot => {
        snapshot.forEach(childSnapshot => {
          Recommended.push({
            gKey: childSnapshot.key,
            id: childSnapshot.val().id,
            username: childSnapshot.val().username,
            service: childSnapshot.val().service,
            aboutMe: childSnapshot.val().aboutMe,
            coordinates: {
              longitude: childSnapshot.val().coordinates.longitude,
              latitude: childSnapshot.val().coordinates.latitude,
            },
            city: childSnapshot.val().city,
            mobileNumber: childSnapshot.val().mobileNumber,
            token: childSnapshot.val().token._55,
          });
        });
        console.log('Recommended', Recommended); //when i log this i can just see array of 4 item
        this.setState({RecommendedProviders: Recommended});
      });
    //   .then(() => this.setState({RecommendedProviders: Recommended}));
  };

UI

<FlatList
     horizontal
     data={this.state.RecommendedProviders}
     renderItem={({item}) => {
        console.log('@item/', item); /when i log this i can just see more than 4 item maybe 20 :D
     }}
    keyExtractor={(item, index) => index.toString()}
/>
1
Oliver D 19 Окт 2019 в 02:15

1 ответ

Хорошо, сначала о регистраторе:

Значение JSON «5» типа NSNumber не может быть преобразовано в Nsstring

Эта ошибка связана с тем, что keyExtractor ожидает строку в качестве возвращаемого значения. Итак, чтобы избежать этого, вы можете попробовать следующее:

<FlatList
    keyExtractor={(item, index) => 'item' + index}
/>

Наконец, о вашем журнале:

Я создал закуску для выставки с вашей сутью, SDK основан на React Native 0.59, вы можете проверить это здесь. Я также попытался смоделировать вашу асинхронную выборку с помощью приведенного ниже кода, и это сработало нормально.

new Promise((resolve, reject) => {
  setTimeout(resolve, 2000, [
    { id: 1, username: 'test', service: 'example' },
    { id: 2, username: 'test', service: 'example' },
    { id: 3, username: 'test', service: 'example' },
    { id: 4, username: 'test', service: 'example' },
  ]);
}).then(res => {
  const providers = [];

  res.forEach(item => providers.push(item));

  this.setState({ RecommendedProviders: providers }, () =>
    console.log('object', this.state.RecommendedProviders)
  );
});

Я считаю, что это может быть решением для понижения вашей версии RN, если это не повлияет негативно на ваше приложение.

Надеюсь, это поможет тебе.

0
Luiz Mariz 19 Окт 2019 в 17:26
Можете ли вы создать на Github суть вашего компонента и package.json. А также распечатку ошибок.
 – 
Luiz Mariz
19 Окт 2019 в 06:07
 – 
Oliver D
19 Окт 2019 в 14:29
Спасибо, я рад, что вы хотите помочь, но, к сожалению, в этой версии это не сработало. Я просто делаю две вещи, но ваши статические данные и помещают данные из firebase, но все еще проблемы, и это старый проект, и просто обновите его. и обрабатывать всю стороннюю библиотеку в Proportional с RN v 0.60+ :( и это занимает слишком много времени, так что какой совет вы можете мне дать :(
 – 
Oliver D
19 Окт 2019 в 19:29
2
О МОЙ БОГ, проблема, связанная со стилем F *, я просто передаю в shadowOffset число, и они принимают объект, как я вижу здесь facebook.github.io/react-native/docs/0.60/… и когда я передаю что-то вроде этого {width:5, height:10} значение JSON ошибки «5» типа NSNumber нельзя преобразовать в Nsstring Gone!
 – 
Oliver D
20 Окт 2019 в 00:55