Как использовать функцию сопоставления с наблюдаемым состоянием Mobx?

#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() ?