ReactNative 基础 - 12 (网络请求 + FlatList,实现触底加载、下拉刷新、回到顶部,多列布局)

news/2024/7/15 19:06:53 标签: react native, 网络, react.js

onEndReached:触底加载

onEndReachedThreshold={0.1} :触底加载的位置, 默认是未显示区域 可见高度为50%(0.5)

onRefresh:下拉刷新(触发事件时,需要将refreshing设为true,返回数据后修改为false)

refreshing:刷新动画的状态,搭配下拉刷新使用

onScroll:监听滚动,传入参数event, event.nativeEvent.contentOffset.y

        注意:RN处理事件的方式,经过特殊处理,特殊封装的同步事件,如果想要查看打印的值,需要先调用persist( )

        回到顶部需要调用FlatList组件的方法,相当于在父组件调用子组件的方法,ref绑定方式,调用 scrollToIndex({index: 0})方法,0代表顶部

export default class App extends Component {
  state = {showBtn: false};
  render() {
    return (
      <View>
        <FlatList
	     ...
          onScroll={this._onScroll}
          ref={el => (this.f1 = el)}>
        </FlatList>

        {this.state.showBtn ? (
          <TouchableOpacity onPress={() => this.f1.scrollToIndex({index: 0})}>
            <Text style={{fontSize: rpx(30), color: 'white'}}>回到顶部</Text>
          </TouchableOpacity>
        ) : null}
      </View>
    );
  }
  //监听滚动,控制回到顶部的显示
  _onScroll = e => {
    e.persist();
    this.setState({showBtn: e.nativeEvent.contentOffset.y > 1000});
  };
}

numColumns:多列布局

        columnWrapperStyle:每行的样式,写法同style

export default class App extends Component {
  render() {
    return (
      <FlatList
        ...
        numColumns={2}
        columnWrapperStyle={{
          justifyContent: 'space-evenly',
          marginTop: rpx(10),
        }}
       ></FlatList>
    );
  }
}


http://www.niftyadmin.cn/n/508616.html

相关文章

页面上有多个按钮,点击按钮,输出当前是第几个按钮

通过for循环&#xff0c;内部采购匿名函数自调用的方式&#xff0c;将每一次循环的i保存出来&#xff0c;那么&#xff0c;在点击按钮时&#xff0c;就能得到当前的按钮序号 &#xff08;不采用闭包方式的话&#xff0c;点击按钮时&#xff0c;当前案例中i已经是5了&#xff0…

ReactNative 基础 - 13 (FlatList横向滚动,实现轮播)

horizontal&#xff1a;横向排列 pagingEnabled&#xff1a;按页滚动 export default class App extends Component {banners [http://www...1.png,http://www...2.png,http://www...3.png,http://www...4.png,];current 0;componentDidMount() {//利用定时器&#xff0c;实…

ReactNative 基础 - 14 (路由、跳转、传参)

react提供了router路由react-router-dom&#xff0c;ReactNative为了能够在移动端有更多的路由使用体验&#xff0c;专门开发了路由系统. 官方网址&#xff1a;https://reactnavigation.org/ 使用RN的路由&#xff0c;需要在项目包安装并且编译成apk才能使用 1、安装&#x…

JS对象 - 拷贝对象的常用方法(浅拷贝与深拷贝)

1、JSON.parse(JSON.stringify(obj)) 先将目标对象转为字符串&#xff0c;再转为对象&#xff0c;可实现对象的深拷贝 var obj1 {name:明明,scores:[88,76,91]} var obj2 JSON.parse(JSON.stringify(obj1)) console.log(obj1 obj2) //false 适用于绝大部分的对象&#xff…

CSS中水平垂直居中的几种常用方法

效果&#xff1a; <div class"outer"><div class"inner">oooo.oooo</div></div> 1、flex弹性布局 外层容器设置flex弹性布局&#xff0c;设置主轴和交叉轴center <style>.outer{width: 200px;height: 200px;background-colo…

自定义Vue指令,设置每个页面的title

定义指令 v-title&#xff1a; directive{title:{inserted: (el) {document.title el.dataset.title}} }调用&#xff1a; <div v-title data-title"首页"></div>

Vue组件封装 ——button组件

一、基础准备工作 1、创建一个基础的vue项目包 2、创建components文件夹&#xff0c;用于存放组件&#xff0c;新建button.vue组件&#xff0c;可以自己取个名字 <script> export default {name: "CatButton", }; </script> 3、在main.js中引入组件 …

Vue组件封装 ——dialog对话框组件

一、基础准备工作 1、创建一个基础的vue项目包 2、创建components文件夹&#xff0c;用于存放组件&#xff0c;新建dialog.vue组件&#xff0c;可以自己取个名字 <script> export default {name: "CatDialog", }; </script> 3、在main.js中引入组件 …