Реагировать на родной плоский список, если возвращается ноль - PullRequest
0 голосов
/ 22 мая 2019

Ниже представлена ​​моя функция плоского списка renderrow, не обеспечивающая этого условия this.state.date.format('YYYYMMDD') <= moment(item.tarih).format('YYYYMMDD') && this.state.secilenAyBasi.year() == moment(item.tarih).format('YYYY') ?, и функция renderRow возвращает ноль для всех элементов (так что, если элемент не возвращается), возвращает компоненту просто хочу, как я это делаю, я пробовал реквизиты ListEmptyComponent, но яне хотел результата спасибо

  renderRow = (item,index) => {
    return (
    this.state.date.format('YYYYMMDD') <= moment(item.tarih).format('YYYYMMDD') && this.state.secilenAyBasi.year() == moment(item.tarih).format('YYYY') ?
    <View>
     {!this.aynıTarihmi(item,index) ?
    <View style={styles.etkinlikTarihContainer}>
      <Text style={styles.etkinlikTarihText}>
        {moment(item.tarih).format('DD MMMM YYYY')}
      </Text>
    </View> : null}
    <TouchableOpacity style={[styles.etkinlikView,this.aynıTarihmi(item,index) ? {borderTopWidth: 0, borderBottomWidth: 1 }: null]}>
    <View style={{alignItems: 'center', minWidth:70}}>
        {item.mod_txt != "Tüm Gün" ? 
          <View style={{alignItems: 'center', justifyContent:'center'}}> 
            {this.getTime(item.baslangic)}
            {this.getTime(parseInt(item.baslangic, 10) +parseInt(item.sure, 10))}
          </View> :
          item.mod_txt == "Tüm Gün" ?
          <Text style={{color:'black'}}> Tüm Gün </Text> : null}
      </View>
      <View
        style={[styles.etkinlikBordorView,{borderRightColor: item.renk ? item.renk : 'green'}]}
      />
      <View style={{justifyContent: 'flex-start'}}>
        <Text style={{fontSize: 15, marginLeft: 5,color:'black',marginVertical:5}}>
          {item.metin ? item.metin : 'Etkinlik Yok'}
        </Text>
      </View>
    </TouchableOpacity>
    </View> : null
    )}

это мой плоский список компонента:

  getActivity() {

    return (
      <View style={styles.etkinlikContainer}>
      <FlatList
      data={this.state.takvimgirdileriStt}
      extraData={this.state.date}
      renderItem={({item,index}) =>this.renderRow(item, index)}
      keyExtractor = {(item,index) => index.toString()}
      />
      </View>
    )
  }

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Не думаю, что вы захотите обнулить строку. Вы должны отфильтровать список this.state.takvimgirdileriStt перед отправкой в ​​FlatList. Для этого вы можете использовать что-то вроде lodash '_.filter. Я не уверен, когда ваши данные будут установлены, но вы захотите сделать что-то подобное после того, как у вас есть данные.

var data = this.state.takvimgirdileriStt;
_.filter(data, function (item) {
    return this.state.date.format('YYYYMMDD') <= moment(item.tarih).format('YYYYMMDD') && this.state.secilenAyBasi.year() == moment(item.tarih).format('YYYY');
}, this);
this.setState({ takvimgirdileriStt: data });

Однако я почти уверен, что вы также можете вернуть пустое <View></View>

Так что вместо того, чтобы делать проверку перед открывающим Видом, попробуйте внутри:

renderRow = (item, index) => {
    var check = this.state.date.format('YYYYMMDD') <= moment(item.tarih).format('YYYYMMDD') && this.state.secilenAyBasi.year() == moment(item.tarih).format('YYYY');
    return (
        <View>
            {check && (
                // ... all your stuff
            )}
        </View>
}

Я также вытащил чек, потому что его немного легче читать.

0 голосов
/ 22 мая 2019

Я думаю, что ваше состояние неверно.

если форматы даты совпадают, вы можете попробовать следующий код

(момент (this.state.date.format ('ГГГГММДД').))

...