RefreshControl没有生效是什么原因?

来源:4-1 ListView列表、下拉刷新、上拉加载的基本使用

大苗子

2017-06-10

跟敲代码,一直没生效。不知为什么。老师帮我看看代码?

我先是跟敲视频代码,没生效,然后又试了群文件里面第二章代码,还是没生效。

最后根据官网文档,里面的例子,也没生效。

http://szimg.mukewang.com/593c17b800012fea09960981.jpg

以下是我的代码。麻烦帮我看看 是不是哪里写错了

import React, {
  Component,
  PropTypes
} from 'react';
import {
  StyleSheet,
  Text,
  View,
  Image,
  ListView,
  TouchableOpacity,
  RefreshControl

} from 'react-native';
import NavigationBar from './NavigationBar'
// import Toast, {
//   DURATION
// } from 'react-native-easy-toast'
var data = {
  "result": [{
    "email": "f.lee@taylor.edu",
    "fullName": "张三张三张三张三"
  }, {
    "email": "g.jackson@hall.net",
    "fullName": "张三张三张三张三张三"
  }, {
    "email": "l.hall@rodriguez.com",
    "fullName": "张三张三张三张三"
  }, {
    "email": "q.lopez@davis.io",
    "fullName": "张三张三张三张三"
  }, {
    "email": "c.gonzalez@perez.net",
    "fullName": "张三张三张三"
  }, {
    "email": "a.johnson@williams.net",
    "fullName": "张三张三"
  }, {
    "email": "i.anderson@lopez.edu",
    "fullName": "张三张三"
  }, {
    "email": "r.lee@davis.org",
    "fullName": "张三张三"
  }, {
    "email": "o.young@lee.edu",
    "fullName": "张三张三张三张三张三"
  }, {
    "email": "j.wilson@williams.org",
    "fullName": "张三张三张三张三张三"
  }, {
    "email": "z.walker@jackson.io",
    "fullName": "张三张三"
  }, {
    "email": "j.martinez@brown.gov",
    "fullName": "张三张三张三张三"
  }, {
    "email": "y.martin@lewis.io",
    "fullName": "张三张三张三张三"
  }, {
    "email": "w.taylor@gonzalez.org",
    "fullName": "张三张三"
  }, {
    "email": "j.thomas@garcia.org",
    "fullName": "张三张三张三张三"
  }],
  "statusCode": 0
};
export default class ListViewTest extends Component {

  constructor(props) {
    super(props);
    const ds = new ListView.DataSource({
      rowHasChanged: (r1, r2) => r1 !== r2
    });
    this.state = {
      dataSource: ds.cloneWithRows(data.result),
      isLoadding: false,
    }

  }

  renderRow(item) {
    return <View style={styles.row}>
        <TouchableOpacity    onPress = {
        () => {
          this.toast.show('你单击了:' + item.fullName, DURATION.LENGTH_LONG);
        }
      } >
 
      <Text style={styles.tips}>
          {item.fullName}
      </Text>
      <Text style={styles.tips}>
          {item.email}
      </Text>
   </TouchableOpacity>
    </View>
  }
  renderSeparator(sectionID, rowID, adjacentRowHighlighted) {
    return <View key={rowID} style={styles.line}>
        
      </View>
  }

  renderFooter() {
    return <Image style={{width:400,height:100}} source={{uri:'https://images.gr-assets.com/hostedimages/1406479536ra/10555627.gif'}}/>
  }

  _onRefresh() {
    // console.log('onLoad', onLoad);
    this.setState({
      isLoadding: true
    });
    setTimeout(() => {

      this.setState({
        isLoadding: false
      })

    }, 2000);
  }
  render() {

    return (
      <View style={styles.container}>
          <NavigationBar 
              title={'ListViewTest'}
           />
           <ListView 
            dataSource = {
              this.state.dataSource
            }
            renderRow={(item)=>this.renderRow(item)}

            refreshcontrol = { <RefreshControl
                                  refreshing={this.state.isLoadding}
              onRefresh = {
        this._onRefresh.bind(this)
              }
                              />}

            renderSeparator = {
              (sectionID, rowID, adjacentRowHighlighted) => this.renderSeparator(sectionID, rowID, adjacentRowHighlighted) 
            }
            renderFooter={()=>this.renderFooter()}

              
            />
          {/*
            <Toast ref={toast=>{this.toast=toast}}/>
          */}
            
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: 'white',

  },
  tips: {
    fontSize: 18,
  },
  row: {

    padding: 5
  },
  line: {
    height: 1,
    backgroundColor: 'black'
  }

});


写回答

1回答

CrazyCodeBoy

2017-06-12

ListView的刷新属性是refreshControl,你是不是写成了refreshcontrol呢?

另外,提示一下:在React Native中组件的属性名对大小写敏感哦。

如下:

<ListView
   dataSource = {
       this.state.dataSource
   }
   renderRow={(item)=>this.renderRow(item)}

   refreshControl = { <RefreshControl
       refreshing={this.state.isLoadding}
       onRefresh = {
           this._onRefresh.bind(this)
       }
   />}

   renderSeparator = {
       (sectionID, rowID, adjacentRowHighlighted) => this.renderSeparator(sectionID, rowID, adjacentRowHighlighted)
   }
   renderFooter={()=>this.renderFooter()}
/>


0
1
大苗子
非常感谢!
2017-06-13
共1条回复

React Native技术精讲与高质量上线App开发

一个真实的上线项目,一次完整的开发过程,全面掌握React Native技术

1577 学习 · 727 问题

查看课程