npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

listview-react

v1.0.0

Published

react listview

Downloads

3

Readme

React-ListView

模拟native下拉刷新的react ListView组件.

Install

    mnpm install @scfe/react-listview  --save

Feature

  • 类似于native的下拉刷新

  • 支持下拉事件和拉到底部的事件

  • 采用浏览器的native scroll

  • 可自定义loading和pullRefreshUI

  • 除了react外不依赖其他第三方库

Screenshots

react-listview

Props

renderItem(item: object, index: number):(required)

每一行的渲染函数.

params:

  • item: 该行的数据

  • index: 改行在数组中得index

renderHeader()

渲染ListView的头部, 通常可以自定义init loading或者其他东西等等.

renderFooter()

渲染ListView的尾部, 通常加载下一页时的loading就可以放到这里渲染. 详情可以看expamples/simple/App.js.

renderPullUI(shouldRefresh: bool)

渲染在下拉时应该显示的提示信息, 比如下拉时会显示, 下拉刷新, 拉到一定位置会出现释放更新.

params:

  • shouldRefresh: 此时下拉的位置是否是可以更新的, 因为可以更新和不可以更新的提示不一样, 可以通过这个来区别.

Example:

renderPullUI={(shouldRefresh)=>{
                        return (
                            <span>
                                <span className={`fa fa-arrow-down ${shouldRefresh && 'list-view-refresh'}`}/>
                                { !shouldRefresh ? ' 下拉刷新' : ' 释放更新' }
                            </span>
                        )
              }}

renderPullLoading()

渲染在下拉时的loading部分的UI.

onEndReached()

ListView到达底部时会触发的事件

onPullRefresh(cb: function)

下拉刷新时触发的事件, 因为loading的state是在ListView内部, 所以当onPullRefresh要异步获取数据时, 获取完成后(无论失败或者成功)得通知ListView, 以便更新state.

该函数支持promise和callback模式, 该函数会传入一个参数cb, 如果采用callback模式, 使用方法如下:

_onPullRefresh(cb) {
        setTimeout(()=> {
            this.setState({
                data: this.data
            });
            cb();
        }, 1000);
    }

promise模式:

    _onPullRefresh(cb) {
        return new Promise((resolve, reject)=> {
            setTimeout(()=> {
                resolve();
            }, 1000);
        });
    }

备注: 这种方法比较hack, 其实理应传入一个pullRefresh Loading来控制, 这样更加符合react思想, 但是直接直接采用这种模式, 性能会更加优秀.

onScroll(e: event, contentDOM: node)

listview滑动时触发的事件.

params

  • e: 滚动事件的引用
  • contentDOM: listview可滚动区域的dom, 暴露这个object是为了解决, 在有些情况下, 需要根据滚动的距离来改变一些ui, 就可以根据这个来做. 使用contentDOM.scrollTop可获取到滚动的距离.

Other Props

  • resistance(number): 下拉刷新时下拉的阻力, 默认为:2.

  • onPullRefreshThreshold(number): 下拉多少距离才触发更新事件, 默认为:80

  • onEndReachedThreshold(number): 距离底部多少距离时触发onEndReached事件, 在content长度不变的情况下, 只会触发一次, 所以如果一次触发, 请求后端失败后, 就不会再次触发. 一般的解决办法是, 请求失败后, 在Footer里添加一个button通过点击来再次触发请求事件. 当列表已经加载完毕后, 就是没有更多的数据时, 需要显示提示(比如:已到底部), 则需要自己渲染Footer在做相应处理.

  • minLoadingTime(number): 下拉刷新的最短loading时间, 默认是一秒.

  • enablePullRefreshEvent(bool): 是否开启下拉刷新事件.

  • enableOnEndReachedEvent(bool): 拉到底部是否会触发事件, 这个用于列表没有更多数据时, 禁止触发onEndReached事件.

  • data(array): 需要显示的数据, 默认为[];

  • style(object): 传入ListView最外层div的style.

  • pullUIStyle(object): 传入给pullUI的style, 暴露这个props的目的是为了解决当css没有载入时, pullUI的style还没有赋予, 而这时需要测量pullUI的高度, 然后transition, 所以初始第一次载入时就会出现transition的距离和pullUI的高度不一致, 导致ui显示bug.

  • contentStyle(object): 传入给content的style.

  • className(string): 传递给listView最外层的div的class.

  • pullUIClassName(string): 传递给pullUI的class, 也就是包含整个pullRefresh需要的提示文字和loading相关的最外层div.

  • contentClassName(string): 传递给content的class, 也就是传递给list数据展示div.

  • pullUIInfoClassName(string): 传递给pull-ui-info的class, 也就是展示文字提示的div.

Functions

unlockReachEndEvent()

这个用于在一次请求失败后, 因为请求失败, 所以content的长度没有变, 所以不会再次触发ReachEndevent. 这时如果要解锁ReachEnd事件, 可以调用这个方法.

resetState()

这个是用于重置所有的state, 也就是假设说有多个数据源都用一个listView, 当从第一个数据源切换到第二个数据源时, 第一个数据源正在刷新时, 切换到第二个数据源, 刷新这个状态会一直保持, 这时如果想重置state, 可调用这个函数. 这个函数也会重置重置scroll高度.

scrollTo(distance: number)

用于控制content的滚动距离, 常见使用场景: 例如公用一个listView时, 切换数据源后需要scrollToTop, 这时就可调用该方法.

params

  • distance: content距离父元素顶部的距离

Static Props

Loading

这个是Listview内部所用的Loading控件, 若需要使用时, 可以直接:


import Listview from '@scfe/react-listview';

.... 此处省略代码


render(){
    return <ListView.Loading className="loading"/>;
}

FAQ

如何解决iOS safari浏览器上下拉的弹性动画?

采用[inobounce](https://github.com/lazd/iNoBounce), 只需在项目中引用该库便可.

pullUI的文字没有隐藏怎么办?

需要设置listview上面的divz-indexlistview高, listview默认的z-index20, 一般来说, 将上面的divz-index设置为20即可.

如何自定义样式?

首先react渲染后的html如下:

<div style="height:555px;" class="react-listview-wrapper " data-reactid=".0.1">
	<div class="react-listview-pull-ui " style="height: 50px; transform: translate3d(0px, -50px, 0px);"
		 data-reactid=".0.1.0">
		<div class="pull-ui-info " data-reactid=".0.1.0.1"><span data-reactid=".0.1.0.1.0"><span
				class="fa fa-arrow-down false" data-reactid=".0.1.0.1.0.0"></span><span data-reactid=".0.1.0.1.0.1"> 下拉刷新</span></span>
		</div>
	</div>
	<div class="react-listview-content " data-reactid=".0.1.1" style="transform: translate3d(0px, 0px, 0px);">
		<div class="list-view-content-inner-wrapper" data-reactid=".0.1.1.1">
			<div class="item" data-reactid=".0.1.1.1.$25">text_25</div>
		</div>
	</div>
</div>

默认className备注:

  • react-listview-wrapper: 是整个component最外层的div, 对应className

  • react-listview-pull-ui: 是整个pullUI的最外层div, 对应pullUIClassNamepullUIStyle

  • pull-ui-info: 是pullUI的文字提示的div, 对应pullUIInfoClassName

  • react-listview-content: 是content的wrapper class, 对应contentClassNamecontentStyle, 需要注意的是, contentdiv下还有个list-view-content-inner-wrapperdiv.

Development

目录说明:

  • dist: 存放编译后的lib文件
  • examples: 存放demo, 在开发的时候也可以拿examples/simple作为调试的载体
  • lib: 组件源文件的存放处
  • _tests_: 测试文件的存放处

Development Script

  • npm start: 启动开发模式下的服务器, 这样默认会加载examples/simple下地index.html, 可以以此作为编写时的调试工具
  • npm run test:w: test模式, 会一直watch文件变动, 然后执行test
  • npm test: 测试
  • npm run build: 编译打包库到dist文件夹下