#reactjs #react-native #expo #mobx
#reactjs #react-native #выставка #mobx
Вопрос:
Теперь я хотел бы использовать функцию Map для отображения компонента с каждым массивом.
Но мой код с map работает некорректно. В firestore в коллекции «еда» есть 3 документа, но эта функция map может отображать только один документ.
Это мой код ниже в компоненте рендеринга.
renderItemBox() {
const { store } = this.props;
const items = store.restaurantStore.Items;
return items.map((value, index) => {
console.log(items);
return (
<TouchableOpacity key={index}>
<View style={styles.itemsBox}>
<View style={styles.itemsImageBox}>
<Image
source={require('../../assets/Images/Home/HomeListImageShop.jpg')}
style={styles.itemsImage}
/>
</View>
<View style={{ flexDirection: 'row' }}>
<Text style={styles.itemsName}>
{value[index].name}
</Text>
<Text style={styles.itemsTag}>
{value[index].tag}
</Text>
</View>
<View style={{ flexDirection: 'row' }}>
<Text style={styles.itemsDescription}>
{value[index].shortDescription}
</Text>
<TouchableOpacity
style={styles.likeButtonBox}
onPress={this.handleLikeButton.bind(this)}
>
{this.handleLikeImage()}
</TouchableOpacity>
</View>
</View>
</TouchableOpacity>
);
});
}
В дополнение к этому, я установил компонент store в своем проекте.
Приведенный выше код импортирует наблюдаемое состояние (массив) из этого хранилища.
Ниже приведено это хранилище.
import { observable, action } from 'mobx';
import firebase from 'firebase';
class RestaurantStore {
@observable Items = [];
@action handleFirestoreCollectionOfFoods () {
const db = firebase.firestore();
db.collection('foods')
.get()
.then((snapshot) => {
const preItems = [];
snapshot.forEach((doc) => {
const docData = doc.data();
preItems.push(docData);
});
this.Items.push(preItems);
})
.catch((error) => {
console.log(error);
});
}
}
export default RestaurantStore;
К счастью, это хранилище может импортировать полный документ из firestore.
Я проверил это с помощью console.log.
Итак, кто-нибудь знает, как полностью использовать функцию сопоставления с состоянием mobx?
Комментарии:
1. Это не связано с функцией map. вы помечаете компонент как observer ?!
2. Конечно, и в компоненте с функцией map я могу получить observerbaleArray из хранилища mobx. Но я не могу отобразить весь массив с помощью map
3. Попробуйте создать макет массива элементов и проверьте результат. Я думаю, что логика рендеринга должна быть пересмотрена. Map и наблюдаемые массивы очень хорошо работают вместе.
4. Я делал это раньше. За это время все объекты в массиве могут быть визуализированы функцией map. Я только что заменил этот массив объектов и функцию для импорта данных из firestore в компонент store.
5. Вы предоставили созданный экземпляр
const restaurantStore = new RestaurantStore()
?