【问题标题】:React-Native flat list pull to refresh not showingReact-Native 平面列表拉取刷新不显示
【发布时间】:2018-09-05 16:57:32
【问题描述】:

我正在努力提取平面列表并使用标题刷新。在执行方面,微调器不会出现。请告诉我我必须解决什么问题。我们需要使用刷新控制吗?

环境

react-native-cli: 2.0.1

反应原生:0.52.0

节点:v8.9.4

class ListSwipe extends Component {

  constructor(props) {
    super(props);
    this.state = { keywords: "", isLoading: true , results:[] , oldresults:[] , isFetching: false }     
  }

  componentDidMount() { 
    return fetch('https://reactnativecode.000webhostapp.com/FruitsList.php')
      .then((response) => response.json())
      .then((responseJson) => {
        this.setState({
          isLoading: false,
          isFetching: false  ,
          results: responseJson,
          oldresults: responseJson
        },...

makeRemoteRequest() {
....
}

handleRefresh = () => {

  this.setState({ isFetching: true }, function() {
    this.makeRemoteRequest()
  });

}


 ....
              <ScrollView style={styles.scroll}>


        <Text> Keywords : {this.state.keywords} </Text>



               {this.state.loading ? (
                <Spinner />
          ) :  <FlatList 
                 extraData={this.state}
                data={this.state.results}
                keyExtractor={(item, index) => item.id}
                renderItem={( {item} ) => {
                    return <ListItem>

                      <Text>{item.fruit_name}</Text>

                  </ListItem>
                  }}  
                  refreshing = {this.state.isFetching}                
                  onRefresh ={this.handleRefresh}
                  onRefresh={() => this.onRefresh()}

         /> }

        </ScrollView> 

【问题讨论】:

  • 在 ScrollView 中添加 refreshControl,如 refreshControl={ }
  • 对于任何可能犯了我的错误的人,请注意“refreshControl”属性 - 它需要有一个小写的“r”

标签: javascript react-native react-native-flatlist


【解决方案1】:

因为您在 ScrollView 中使用 FlatList,所以您应该为 ScrollView 定义刷新,如下所示:

<ScrollView
      refreshControl={ 
      <RefreshControl 
      refreshing={this.state.isFetching} 
      onRefresh={this.handleRefresh} 
      /> 
      } 
 >
<FlatList ... />
</ScrollView>

别忘了导入 RefreshControl:

import { RefreshControl } from 'react-native';

【讨论】:

  • 您不应该将 Flatlist 放在 ScrollView 中。 Flatlist 针对大数据进行了优化;它会在需要时渲染项目并释放 RAM。将它放在 ScrollView 下会消除所有优化。在这里阅读:nyxo.app/…
【解决方案2】:

工作。添加enabled={true}

          refreshControl={
            <RefreshControl
              enabled={true}
              refreshing={refreshing}
              onRefresh={onRefresh}
            />
          }

【讨论】:

    【解决方案3】:

    ** 表示平面列表中拉动刷新的示例代码。相应修改**

     import React, { Component } from 'react'
            import { Text,FlatList,Dimensions,Image,TouchableHighlight } from 'react-native'
    
            export default class Home extends Component {
    
                constructor(props) 
                {
                    super(props);
                this.state = {
                    data : [],
                    gender : "",
                    isFetching: false,
                }
                }
    
            componentWillMount()
            {
    
                this.searchRandomUser()
            }
    
            onRefresh() {
                this.setState({ isFetching: true }, function() { this.searchRandomUser() });
             }
    
            searchRandomUser = async () =>
            {
               const RandomAPI = await fetch('https://randomuser.me/api/?results=20')
               const APIValue = await RandomAPI.json();
                const APIResults = APIValue.results
                  console.log(APIResults[0].email);
                  this.setState({
                      data:APIResults,
                      isFetching: false
                  })
    
            }
    
              render() {
                return (
                  <View style = {styles.container}>
             <TouchableHighlight
             onPressOut = {this.searchRandomUser}
                 style = {{width:deviceWidth - 32, height:45,backgroundColor: 'green',justifyContent:"center",alignContent:"center"}}>
                      <Text style = {{fontSize:22,color: 'white',fontWeight: 'bold',textAlign:"center"}}>Reload Data</Text>
                 </TouchableHighlight>
             <FlatList
                    data={this.state.data}
                    onRefresh={() => this.onRefresh()}
                  refreshing={this.state.isFetching}
                    keyExtractor = { (item, index) => index.toString() }
                    renderItem={({item}) =>
                    <View style = {styles.ContainerView}>
                    <View>
            <Image
            source={{uri : item.picture.large}}
            style = {{height:100,width:100,borderRadius: 50,marginLeft: 4}}
            resizeMode='contain'
            />
            </View>
    
            <View style = {{flexDirection: 'column',marginLeft:16,marginRight: 16,flexWrap:'wrap',alignSelf:"center",width: deviceWidth-160}}>
            <Text>Email Id : {item.email}</Text>
    
            <Text>Full Name : {this.state.gender} {item.name.first} {item.name.last}</Text>
            <Text>Date of birth : {item.dob.age}</Text>
            <Text>Phone number : {item.phone}</Text>
    
            </View>
    
            </View>
                    }
                    />
                  </View>
                )
              }
            }
            const deviceWidth = Dimensions.get('window').width
            const deviceHeight = Dimensions.get('window').height
            const styles = StyleSheet.create({
                container: {
                  flex: 1,
                  alignItems: 'center',
                  justifyContent: 'center',
                  marginTop:22
                },
                ContainerView:
                {
                    // backgroundColor:'grey',
                    marginBottom:20,
                    paddingVertical:10,
                    backgroundColor: '#F5F5F5',
    
                    borderBottomWidth:0.5,
                    borderBottomColor:'grey',
                    width: deviceWidth-40,
                    marginLeft:20,
                    marginRight:20,
                    marginTop:20,
                    flexDirection:'row'
                }
              });
    

    【讨论】:

      【解决方案4】:

      请检查下面的代码并像这样实现。

      import React, { Component } from 'react';
      import { FlatList, ListView, Text, TouchableOpacity, View, ScrollView, RefreshControl, StatusBar } from 'react-native';
      
      export default class Sample extends Component {
      constructor(props) {
              super(props)
              this.state = {
                  refreshing: false,
              }
          }
      
           _onRefresh = () => {
              this.setState({refreshing: true});
          }
           render() {         
              return (  
                  <View> 
                  <FlatList
                          data={this.props.dataSource}
                          extraData={this.props.dataSource}
                          renderItem={this._renderItem}
                          keyExtractor ={this._keyExtractor}
                          refreshControl={
                              <RefreshControl 
                               refreshing={this.state.refreshing}
                               onRefresh={this._onRefresh}
                              />
                          }
                      />
                  </View>
              )
              }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-04
        • 1970-01-01
        • 2017-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        相关资源
        最近更新 更多