У меня есть функция для получения данных из 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 ответ
Хорошо, сначала о регистраторе:
Значение 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, если это не повлияет негативно на ваше приложение.
Надеюсь, это поможет тебе.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.
{width:5, height:10}
значение JSON ошибки «5» типа NSNumber нельзя преобразовать в Nsstring Gone!