Компонент нижнего колонтитула списка React Native не работает

#javascript #reactjs #react-native

#javascript #reactjs #react-native

Вопрос:

Я работаю над React native. Я использую FlatList. Я хочу показывать панель загрузки по мере продвижения вниз. Я написал код для этого.

Я просмотрел документацию, но она не работает. Я предполагаю, что я совершаю ошибку при ожидании. Я не знаю, как его использовать. В чем отличие асинхронности? Я оставляю пример кода ниже.

Заранее спасибо за вашу помощь.

 handleRefresh = () => {
    this.setState({
      offset: 0,
      maxSize: 10,
      isSearch: false,
      isLoading: true,
      isRefreshing: true
    }, () => {
        this.loadData();
    });
};

handleLoadMore = () => {
    this.setState({            
        maxSize: this.state.maxSize   5,
        isSpinner: true
    }, () => {
        this.loadData();
    });
};

keyExtractor = (item, index) => index.toString();

renderFooter = () => {
    if(this.state.isSpinner === false) { return null; }

    return (
        <View style={{ paddingVertical: 20 }}>
            <ActivityIndicator animating size="small" />
        </View>
    );
};

loadData = async () => {
    try {
        const { offset, maxSize } = this.state;            

        const username = await AsyncStorage.getItem('username');
        const token = await AsyncStorage.getItem('token');

        var credentials = Base64.btoa(username   ':'   token);
        var URL         = `http://demo.espocrm.com/advanced/api/v1/Lead?sortBy=createdAtamp;ascamp;offset=${offset}amp;maxSize=${maxSize}`;            

        axios.get(URL, {headers : { 'Espo-Authorization' : credentials }})
        .then(this.dataSuccess.bind(this))
        .catch(this.dataFail.bind(this));
    } catch (error) {
        Alert.alert(
            'Hata',
            'Bir hata meydana geldi. Lütfen yöneticiye başvurunuz.',
            [
                { text: 'Tamam', onPress: () => null }
            ]
        );
    }
};

dataSuccess(response) {        
    this.setState({ isRefreshing: false, isSpinner: false, isLoading: false, leadList: response.data.list });
}

dataFail(error) {
    this.setState({ isLoading: false });

    Alert.alert(
        'Hata',
        'Beklenmedik bir hata oluştu',
        [
            { text: 'Tamam', onPress: () => null }
        ]
    );
}

render() {
    const { isLoading, isRefreshing, searchText, leadList } = this.state;        
    return(
        <View style={styles.container}>
            <SearchBar 
                placeholder="Bir lead arayın..."
                onChangeText={this.searchLead.bind(this)}
                onClear={this.handleRefresh}
                onCancel={this.loadData}
                value={searchText}
            />
            {
                isLoading ? <ActivityIndicator style={styles.loading} size="large" color="orange" /> :
                        <FlatList
                            data={leadList}
                            ListFooterComponent={this.renderFooter}
                            renderItem={({item}) =>
                                <ListItem
                                    leftAvatar={{ source: { uri: 'https://pbs.twimg.com/profile_images/567081964402790401/p7WTZ0Ef_400x400.png' } }}
                                    title={item.name}
                                    subtitle={item.status}
                                    bottomDivider={true}
                                />
                            }
                            keyExtractor={this.keyExtractor}
                            refreshing={isRefreshing}
                            onRefresh={this.handleRefresh}
                            onEndReached={this.handleLoadMore}
                            onEndReachedThreshold={0.5}
                        />
            }
        </View>
    )
}
}
  

Комментарии:

1. Что находится leadList в строке data={leadList} ?

2. Данные из API. @gbalduzzi

3. Просмотрите коды. Мой вопрос в другом.

Ответ №1:

В вашем компоненте FlatList вам необходимо включить атрибут с именем ExtraData и установить для него значение this.state, чтобы компонент обновился.

 <FlatList
  data={leadList}
  extraData={this.state}
  ...
/>