Code Monkey home page Code Monkey logo

react-native-smartrefreshlayout's Introduction

React Native SmartRefreshLayout npm version

React-Native-SmartRefreshLayout是基于Android SmartRefreshLayout 开发的插件 ,
可提供类似ios的弹性刷新,该插件可完全使用React Native进行自定义

HeaderComponent现在支持任意的RN组件,但是需要放在AnyHeader的组件中,
其中onHeaderPulling、onHeaderReleasing和onHeaderMoving的参数为{nativeEvent:{percent,offset,headerHeight}},可用来控制下拉和释放过程中更为精细的动画,
如果下拉和释放过程不需要过程动画,则使用onPullDownToRefresh和onReleaseToRefresh即可实现。
请看示例:Example
HuaweiRefreshControlLottieRefreshControl

IOS自定义下拉刷新组件见React-Native-MJRefresh

建议:该组件与lottie-react-native配合使用可获得绝佳的下拉动画效果

安装

第一步

工程目录下运行:

npm install --save react-native-smartrefreshlayout

or (已经安装了yarn)

yarn add react-native-smartrefreshlayout

第二步

工程目录下运行:

react-native link react-native-smartrefreshlayout

使用

在工程中导入:

import {SmartRefreshControl,DefaultHeader} from 'react-native-smartrefreshlayout';
//使用方法和RN官方的RefreshControl类似,
            <ScrollView
                refreshControl={<SmartRefreshControl
                    ref={ref => this.rc = ref}
                    HeaderComponent={<DefaultHeader/>}
                    onRefresh={() => {
                        setTimeout(() => {
                            this.rc && this.rc.finishRefresh();
                        }, 1000)
                    }}
                />}
            >
            </ScrollView>

组件

SmartRefreshControl

其他组件查看AnyHeaderDefaultHeaderClassicsHeaderStoreHouseHeader

查看属性

查看方法

文档

Props

HeaderComponent

用于渲染SmartRefreshLayout组件的header,默认为DefaultHeader。

NOTE

必须传入插件中给出的Header组件,如AnyHeader,DefaultHeader等

Type Required
Element No

renderHeader

用于渲染SmartRefreshLayout组件的header,默认为DefaultHeader。

NOTE

必须传入插件中给出的Header组件,如AnyHeader,DefaultHeader等

Type Required
Element/func No

enableRefresh

是否启用下拉刷新,默认为true

Type Required
boolean No

headerHeight

设定header的高度

NOTE

自定义 header 时应指定headerHeight。

Type Required
number No

primaryColor

设置刷新组件的主调色

Type Required
string No

autoRefresh

NOTE

time字段含义:延迟time毫秒后自动刷新

是否自动刷新

Type Required
object:{refresh:boolean, time:number} No

pureScroll

是否启用纯滚动

Type Required
boolean No

overScrollBounce

是否允许越界回弹

Type Required
boolean No

overScrollDrag

是否启用越界拖动,类似IOS样式。

Type Required
boolean No

dragRate

设置组件下拉高度与手指真实下拉高度的比值,默认为0.5。

Type Required
number No

maxDragRate

设置最大显示下拉高度与header标准高度的比值,默认为2.0。

Type Required
number No

onPullDownToRefresh

可下拉刷新时触发

Type Required
function No

onReleaseToRefresh

可释放刷新时触发

Type Required
function No

onRefresh

刷新时触发

Type Required
function No

onHeaderReleased

Header释放时触发

Type Required
function No

onHeaderPulling

   ({nativeEvent: {percent:number, offset:number, headerHeight:number}})=>void;

header下拉过程中触发

Type Required
function No

onHeaderReleasing

   ({nativeEvent: {percent:number, offset:number, headerHeight:number}})=>void;

header释放过程中触发

Type Required
function No

onHeaderMoving

   ({nativeEvent: {percent:number, offset:number, headerHeight:number}})=>void;

header移动过程中触发,包括下拉过程和释放过程。

Type Required
function No

Methods

finishRefresh

   finishRefresh([params]);

完成刷新

Name Type Required
params object NO

Valid params keys are:

  • delayed (number) - 延迟完成刷新的时间
  • success (boolean) - 是否刷新成功,暂时没有影响

示例

图片名称 图片名称 图片名称

react-native-smartrefreshlayout's People

Contributors

2534290808 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

react-native-smartrefreshlayout's Issues

请问为什么只会渲染10条数据,超过的部分渲染不出来?

image
<View style={{flex: 1}}>
<FlatList
style={{flex: 1}}
renderScrollComponent={
(props) => <ScrollView style={{flex: 1}}
refreshControl={<SmartRefreshControl
ref={ref => this.rc = ref}
renderHeader={}
onRefresh={() => {
setTimeout(() => {
this.rc && this.rc.finishRefresh();
}, 1000)
}}
/>}
>

}
renderItem={this._renderItem}
data={data}

            />
        </View>

我总共定义了13条数据,但是超过10的就不会渲染出来了

autoRefresh中timeout延迟n毫秒后自动刷新无效!

 <ScrollView
        refreshControl={
          <SmartRefreshControl
            ref={ref => this.rc = ref}
            HeaderComponent={<DefaultHeader/>}
            autoRefresh={{refresh: true, timeout: 5000}}
            onRefresh={this.onRefresh}/>}>
        {children}
 </ScrollView>

无论你设置多少,都无效

0.61

大佬 这个项目可以更新下吗 大约什么时间啊 我们项目重构了 再过 15 天要重新 提交版本了

安卓运行的时候报错了

Error:(42, 65) 错误: 类型参数ReactSmartRefreshLayout不在类型变量T的范围内
其中, T是类型变量:
T扩展已在类 ViewGroupManager中声明的ViewGroup

public class ReactSmartRefreshLayout extends SmartRefreshLayout {
       ^
  找不到android.support.v4.view.NestedScrollingParent的类文件
警告: 未知的枚举常量 Scope.LIBRARY
原因: 找不到android.support.annotation.RestrictTo$Scope的类文件


public class SmartRefreshLayoutManager extends ViewGroupManager<ReactSmartRefreshLayout>{
                                                                ^
  其中, T是类型变量:
    T扩展已在类 ViewGroupManager中声明的ViewGroup

        smartRefreshLayout.setEnableLoadMore(false);//暂时禁止上拉加载
                          ^
  符号:   方法 setEnableLoadMore(boolean)
  位置: 类型为ReactSmartRefreshLayout的变量 smartRefreshLayout

你好作者! 你的lottie的案例里面的关闭函数有些问题

你的是这样的
finishRefresh=(params)=>{
this._refreshc && this._refreshc.finishRefresh(params);
this.lottieView.reset();
}
然而在运行这个函数的时候就执行this.lottieView.reset();的话 在动画显示上会不合理(因为数据获取往往都是很快的 也就是说this.lottieView.play()和this.lottieView.reset();的执行间隔 取决于你数据获取的间隔) 而且在header弹回顶部时是没动画的 这样的结果往往没有显示lottie
所以 以下的方式反而适合数据获取很快的情况
finishRefresh=()=>{
this._refreshc && this._refreshc.finishRefresh(()=>{
this.lottieView.reset();
});
}

更新一下

希望更新下 smart-refresh-layout库,现在这个库版本太老了,不能兼容 Android X

在安卓真机中报SPModule为null

package.json
{
"main": "node_modules/expo/AppEntry.js",
"scripts": {
"start": "expo start",
"clean": "expo r -c",
"android": "expo start --android",
"ios": "expo start --ios",
"web": "expo start --web",
"eject": "expo eject",
"test": "jest --watchAll"
},
"jest": {
"preset": "jest-expo"
},
"dependencies": {
"@ant-design/react-native": "^4.1.0",
"@babel/plugin-transform-flow-strip-types": "^7.14.5",
"@expo/metro-config": "^0.1.73",
"@expo/react-native-read-more-text": "^1.1.0",
"@expo/vector-icons": "^12.0.0",
"@react-native-community/masked-view": "0.1.10",
"@react-native-community/segmented-control": "^2.2.2",
"@react-navigation/bottom-tabs": "5.11.2",
"@react-navigation/native": "~5.8.10",
"@react-navigation/stack": "~5.12.8",
"babel-plugin-import": "^1.13.3",
"babel-plugin-inline-import": "^3.0.0",
"expo": "~41.0.1",
"expo-asset": "~8.3.1",
"expo-blur": "^9.0.3",
"expo-constants": "~10.1.3",
"expo-font": "~9.1.0",
"expo-linking": "~2.2.3",
"expo-splash-screen": "~0.10.2",
"expo-status-bar": "~1.0.4",
"expo-step-indicator": "^0.1.2",
"expo-web-browser": "~9.1.0",
"lottie-react-native": "^4.0.2",
"react": "17.0.2",
"react-dom": "17.0.2",
"react-native": "https://github.com/expo/react-native/archive/sdk-41.0.0.tar.gz",
"react-native-autoheight-webview": "^1.5.8",
"react-native-debugger": "^1.1.0",
"react-native-gesture-handler": "~1.10.2",
"react-native-mjrefresh": "^0.7.0",
"react-native-pager-view": "^5.2.0",
"react-native-read-more-text": "^1.1.2",
"react-native-reanimated": "~2.1.0",
"react-native-render-html": "^5.1.1",
"react-native-safe-area-context": "3.2.0",
"react-native-screens": "~3.0.0",
"react-native-smart-refresh": "^1.1.6",
"react-native-smartrefreshlayout": "^0.6.7",
"react-native-sticky-parallax-header": "^0.4.0",
"react-native-svg": "12.1.0",
"react-native-swiper": "^1.6.0",
"react-native-tinymce": "^0.1.2",
"react-native-web": "~0.13.12",
"react-native-webview": "11.2.3"
},
"devDependencies": {
"@babel/core": "^7.9.0",
"@types/react": "~16.9.35",
"@types/react-native": "~0.63.2",
"jest-expo": "~41.0.0",
"typescript": "~4.0.0"
},
"private": true
}

增加beginRefresh方法

SmartRefreshControl.js

    /**
     * 参数格式为{delayed:number,success:bool}
     * delayed:延迟刷新
     * success:是否刷新成功
     * @param params
     */
    finishRefresh=({delayed=-1,success=true}={delayed:-1,success:true})=>{
        this.dispatchCommand('finishRefresh',[delayed,success])
    }
    //新增
    beginRefresh=()=>{
        this.dispatchCommand('beginRefresh',[])
    }

SmartRefreshLayoutManager.java

private static final String COMMAND_FINISH_REFRESH_NAME="finishRefresh";
//新增
private static final String COMMAND_BEGIN_REFRESH_NAME="beginRefresh";
private static final int COMMAND_FINISH_REFRESH_ID=0;
//新增
private static final int COMMAND_BEGIN_REFRESH_ID=1;

@Nullable
    @Override
    public Map<String, Integer> getCommandsMap() {
        return MapBuilder.of(
                COMMAND_FINISH_REFRESH_NAME,COMMAND_FINISH_REFRESH_ID,
                COMMAND_BEGIN_REFRESH_NAME,COMMAND_BEGIN_REFRESH_ID//新增
        );
    }


@Override
    public void receiveCommand(ReactSmartRefreshLayout root, int commandId, @Nullable ReadableArray args) {
        switch (commandId){
            case COMMAND_FINISH_REFRESH_ID:
                int delayed=args.getInt(0);
                boolean success=args.getBoolean(1);
                if(delayed>=0){
                    root.finishRefresh(delayed,success);
                }else{
                    root.finishRefresh(success);
                }
                break;
            //新增
            case COMMAND_BEGIN_REFRESH_ID:
               if(!root.isRefreshing()){
                   root.autoRefresh();
               }
                break;
            default:break;
        }
    }

在RN0.57.6中的打包会出错

RN版本:0.57.6;
库版本:0.6.3;
安卓版本:8.1.0;
android/build.gradle下的配置信息:
_20181206150307
image
app/build.gradle下的配置信息:
image
报错信息:
image

嵌套的不能使用

  1. 比如主界面有下拉刷新, 在弹出的子界面有也下拉刷新, 当返回主界面时, 此时主界面的下拉刷就不能使用了;
  2. 在同一个界面有两个下拉刷, 则不管那一个都无法工作;

how to remove refreshing animation?

我尝试修改了AnyHeader.java中的onFinsh中的return 500,变成了return 0.但是,没有效果。
我需要释放刷新后,就立即回弹,不要再有别的动画了。

RN0.55打包报错

image
打包时报这个错
image
我的gradle版本是4.10.1
android studio 3.2
RN0.55
react-native-SmartRefreshLayout 0.6.5

背景色

请教一下, 我有个需求需要用SmartRefreshControl 的style={{backgroundColor:'red'}} 的方式设置背景色,纠结了很久没有效果, 求指点一下

希望更新一下(重大bug发现,无法兼容 Android P,不推荐使用)

//1.1.0 (1.0.5及以前版本的老用户升级需谨慎,API改动过大)
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-32'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-32'//没有使用特殊Header,可以不加这行
compile 'com.android.support:appcompat-v7:25.3.1'//版本 23以上(必须)

//1.1.0 androidx 版本
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-andx-15'
implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-andx-15'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'

//1.0.5 (重大bug发现,无法兼容 Android P,不推荐使用)

上拉加载没有效果

flatlist上拉加载更多没有效果,都没解决,怎么就关了呢?不使用这个,加载更多就正常

footer的支持

我改了一下,foote上啦你松开就变成了加载完成,感觉这个支持起来难度有点大呀

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.