Реагировать на карту родного штата. как получить только 1 значение? - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть этот экран, который показывает все загруженные объявления:

. enter image description here

Когда я выбираю одну из объявлений, она должна показывать мне новые экраны со всеми фотографиями и деталями из этого указания c ad.

Но вместо этого он показывает мне подробные объявления, но для всех объявлений, а не для одного ...

enter image description here

Вот код, как я отображаю свои значения из массива:

{

                    this.state.ads && 
                    this.state.ads.map((ads) => {
                        var s = require('../styles')
                        var id = this.state.indexas
                        return(
                            <View key={id} style={s.adContainer}>
                                <TouchableHighlight>
                                    <View style={{justifyContent: "center", alignContent: "center"}}>

                                   <SafeAreaView>
                                        <Carousel
                                            sliderWidth={screenWidth}
                                            sliderHeight={screenWidth}
                                            itemWidth={screenWidth - 60}
                                            data={ads.images}
                                            renderItem={this._renderItem}
                                            hasParallaxImages={true}
                                        />
                                    </SafeAreaView> 
                                 </View>
                                 </TouchableHighlight>
                                 <TouchableHighlight>
                                    </TouchableHighlight>
                                        <View style={s.listedItemCell}>
                                    <Text>Textas:</Text> 
                                    <Text>{ads.text}</Text>
                                 </View>

                                 <View style={s.listedItemCell}>
                                    <Text>Paskelbta:</Text> 
                                    <Text>{ads.timestamp}</Text>
                                 </View>

                                 <View style={s.listedItemCell}>
                                    <Text>Kaina:</Text> 
                                    <Text>{ads.kaina}</Text>
                                 </View>
                            </View>
                        )
                    })
                }

Я могу получить доступ ко всему с помощью этого кода. Но мне нужно только 1 значение с указанным c индексом (this.state.indexas)

Я получаю сообщение об ошибке, в котором говорится, что все идентификаторы одинаковы (вот что я хочу, указав c ID), но все же показывает мне все данные из массива ...

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Опора key для компонента View должна быть уникальной. Но в вашем случае вы присваиваете this.state.indexas как key, который содержит только индекс выбора.

Поскольку вы используете map в JS, второй параметр map содержит текущий индекс конкретного элемента в этом массиве.

Поэтому измените свой код, как показано ниже,

{
  this.state.ads &&
    this.state.ads.map((ads, index) => {
      var s = require("../styles");
      return (
        <View key={index} style={s.adContainer}>
          ...
        </View>
      )
    })
}

Таким образом, вы будете уверены, что ваш ключ не продублирован.

Редактировать

Поскольку вы хотите отобразить определенный c элемент в соответствии с выбранным значением. Вы можете использовать filter или find в JS.

{
  this.state.ads &&
    this.state.ads
      .filter(item => item.id == this.state.indexas)
      .map(ads => {
        var s = require("../styles");
        return (
          <View key={this.state.indexas} style={s.adContainer}>
            ...
          </View>
        );
      });
}

Надеюсь, это поможет вам. Не стесняйтесь сомнений.

0 голосов
/ 05 апреля 2020

Я уже понял это. Я отправил значение объявления вместо индекса и присвоил значение массива новому состоянию, затем я избавился от карты и отобразил только новое состояние.

...