Я всего лишь новичок в React-Native и каждый день схожу с ума от неожиданного поведения.Конечно, это моя вина, я все еще учусь.Сегодня я изо всех сил пытаюсь понять, что происходит с моим кодом.
У меня есть функция, которая вызывает массив объектов в моем локальном хранилище.Если я утешу ответ от обещания, это даст мне идеальный массив (я думаю).После этого я установил и снова включил его на моей консоли.Но, к моему удивлению, мой компонент списка ничего не рендерит (и он наверняка работает так, как раньше).
Я добавлю свой код:
/*FUNCTION FILE*/
getAllData: async () => {
var data = [{id:null, address:null, name:null}];
AsyncStorage.getAllKeys((err, keys) => {
AsyncStorage.multiGet(keys, (err, stores) => {
stores.map((result, i, store) => {
// get at each store's key/value so you can work with it
var key = store[i][0];
var value = store[i][1];
data[i] = {id: i, address: key, name: value}
});
});
});
return data},
//MAIN FILE (DAD COMPONENT)
import React, { Component } from 'react';
import { View, Text } from 'react-native';
import NewTagButton from '../components/NewTagButton';
import TagList from '../components/TagList';
import storage from '../functions/Storage';
import { Object } from 'core-js';
//import { TagPosition } from '../functions/GPSTag'
class TagsScreen extends Component {
constructor(props) {
super(props);
this.state = {message:"",
pairedDevices: [],
};
}
componentDidMount () {
var self = this;
storage.getAllData() //tem que esperar a promise
.then(function (devices) {
self.setState({message: "Scaneamento finalizado."});
self.setState({pairedDevices: devices});
console.log("devices")
console.log(devices)
console.log("State")
console.log(self.state.pairedDevices)
})
.catch(()=> console.log("Promise rejected"))
}
render() {
return (
<View>
<Text>{this.state.message}</Text>
<TagList devices = {this.state.pairedDevices} origem = 'MyTag'/>
<NewTagButton/>
</View>
);
}
}
export default TagsScreen;
LIST COMPONENT THAT SHOULD RENDER THE LIST
import React from 'react';
import { View, StyleSheet } from 'react-native';
import TagItem from '../components/TagItem'
const TagList = props => {
const devicesList = props.devices;
const origem = props.origem;
//aqui a gente vai passar device a device para a page TagItem
const items = devicesList.map((device) =>
<TagItem
key = {device.address}
address = {device.address}
name = {device.name}
origem = {origem}/>
);
return (
<View key = {items} styles = {styles.container}>
{items}
</View>
);
}
const styles = StyleSheet.create({
container : {
alignItems:'center',
}
})
export default TagList;
Спасибо.
РЕДАКТИРОВАТЬ: я поместил несколько журналов между компонентами, изображение на URL, потому что у меня недостаточно репутацииха-ха
Console.Log
EDIT2:
Я только что создал глупую кнопку, чтобы установить состояние только с помощью строки.После изменения этого состояния приложение отображает список.Конечно, это проблема с обещанием, кто-то может мне помочь?=]