22个React-Native(RN)项目常用第三方组件使用方法和BUG汇总

组件名

  1. "react-native-actionsheet": "^2.4.2"
    平台适应性: 跨平台
    作用: 一个自定义ActionSheet,默认从手机底部弹出一个选择列表供选择
    安装使用: npm install react-native-actionsheet --save
    参考的全部配置
    参考的全部说明文件
import ActionSheet from 'react-native-actionsheet'
class Demo extends React.Component {
  showActionSheet = () => {
    this.ActionSheet.show()
  }
  render() {
    return (
      
        点我打开弹出该组件
         this.ActionSheet = o}
          title={'选择喜欢的食物?'}
          options={['苹果', '梨子', '取消']}
          cancelButtonIndex={2}
          destructiveButtonIndex={1}
          onPress={(index) => { 
            /* 如果点击了 列表options 里面的某一个元素(比如苹果), 那么下面的代码就会执行写在此处 */
            console.log(`点击了${index}`)
            }}
        />
      
    )
  }
}
  1. "react-native-amap3d": "^1.0.2",
    平台适应性: Android + iOS, (说明:RN v0.53+ 存在一些 bug(主要影响 iOS 自定义 View))
    作用:

地图模式切换(常规、卫星、导航、夜间)
3D 建筑、路况、室内地图
内置地图控件的显示隐藏(指南针、比例尺、定位按钮、缩放按钮)
手势交互控制(平移、缩放、旋转、倾斜)
中心坐标、缩放级别、倾斜度的设置,支持动画过渡
地图事件(onPress、onLongPress、onLocation、onStatusChange)
地图标记(Marker)

自定义信息窗体
自定义图标
折线绘制(Polyline)
多边形绘制(Polygon)
圆形绘制(Circle)
热力图(HeatMap)
海量点(MultiPoint)
离线地图
安装使用: npm i react-native-amap3d --save
安装配置
相关推荐:

  • react-native-baidumap-sdk(百度地图 SDK)
  • react-native-amap-geolocation(高德地图定位模块)
    参考的使用配置
    参考的全部说明文件
import { MapView } from 'react-native-amap3d'
class Demo extends React.Component {
  render() {
    return (
      
       
      
    )
  }
}
  1. "react-native-image-crop-picker": "^0.21.2",
    平台适应性: iOS / Android
    作用: 图像选择器,支持相机,可配置压缩,多个图像和裁剪, 不带Actionsheet弹出层,需要自己结合组件进行使用
    安装使用: npm i react-native-image-crop-picker --save
    安装配置
    参考的使用配置
import ImagePicker from 'react-native-image-crop-picker'
class Demo extends React.Component {
  open = () => {
    ImagePicker.openPicker({
      width: 300,
      height: 400,
      cropping: true
    }).then(image => {
      if (response.uri && Platform.OS !== 'android') {
          // 从uri截取fileName
          const temp = response.uri.split('/');
          response.fileName = temp[temp.length - 1];
          // 去掉 file://
          response.uri = response.uri.substring(7);
      }
    });
  }
  render() {
    return (
      
       {
         this.open()
       }}>点我打开图片选择器
      
    )
  }
}
  1. "react-native-image-picker": "^0.26.10",
    平台适应性: iOS / Android
    作用: 图像选择器,支持相机, 自带Actionsheet弹出层
    安装使用: npm i react-native-image-picker --save
    安装配置
    参考的使用配置
import ImagePicker from 'react-native-image-picker';
class Demo extends React.Component {
  const options = {
      title: '选择图片',
      customButtons: [{ name: '自定义按钮', title: '自定义按钮的文字' }],
      storageOptions: {
        skipBackup: true,
        path: 'images',
      },
  };  
  open = () => {
   ImagePicker.showImagePicker(options, (response) => {
        console.log('Response = ', response);
        // 以下是触发的事件后,对应的结果参数的值,可以进行各种定制操作
      if (response.didCancel) {
        console.log('取消了按钮');
      } else if (response.error) {
        console.log('打开出错 ', response.error);
      } else if (response.customButton) {
        console.log(点击了自定的按钮 ', response.customButton);
      } else {
        const source = { uri: response.uri } 
      }
    });
  }
  render() {
    return (
      
       {
         this.open()
       }}>点我打开选择器
      
    )
  }
}
  1. "react-native-modal": "^6.5.0",
    平台适应性: iOS / Android
    作用: 封装了一个弹出模态窗,具有动画
    安装使用: npm i react-native-modal --save
    参考的使用配置
import Modal from "react-native-modal";
class Demo extends React.Component {
    constructor(props) {
      super(props)
      this.state = {
          isModalVisible: false
      }
    }
    _toggleModal = () => {
      this.setState({ isModalVisible: !this.state.isModalVisible });
    }
  render() {
    return (
      
       {
             this._toggleModal()
          }}>点我打开Modal

          
            
                打开了Modal!
                
                    点击我隐藏Modal
                
          
        
      
    )
  }
}
  1. "react-native-modal-datetime-picker": "^6.0.0",
    平台适应性: iOS / Android, 在Android和IOS上面的样式不太一样
    作用: 用于在模态中显示本机日期选择器和时间选择器,不用手动去调用原生的TimePicker和DatePicker
    说明: 支持全部的RN官方的组件datepickerios的全部配置项目
    安装使用: npm install react-native-modal-datetime-picker --save
    参考的使用配置
import DateTimePicker from 'react-native-modal-datetime-picker';
class Demo extends React.Component {
    constructor(props) {
      super(props)
      this.state = {
          isVisible: false
      }
    }
    _toggleModal = () => {
      this.setState({ isVisible: !this.state.isVisible });
    }
    //选择成功之后的回调函数
    selectResult = (date) =>{
        console.log(data);
        // 需要手动执行关闭日期
        this._toggleModal()
    }
    
  render() {
    return (
      
       {
             this._toggleModal()
          }}>点我打开日期选择器

        
      
    )
  }
}
  1. "react-native-picker": "^4.3.7"

平台适应性: 跨平台
作用:
1.弹出选择选择列表:如时间选择器,
2.级联选择:如日期选择器,地址选择器等。当选择1级列表某一项的时候,次级列表自动切换
安装使用:

  1. npm install react-native-picker --save
  2. react-native link
  3. 如果出现了问题,那么直接去MainJava去自行导入和new分配
  4. IOS推荐用点我打开

参考的数据结构写法
React-Native-picker使用最详细

  1. "react-native-root-toast": "^3.0.1",

平台适应性: 跨平台
作用: 用于显示一个全局的弹窗提示,3.5秒后自动消失
说明: 全部用JS实现,无任何原生,可以看做一个全局组件
安装: npm install react-native-root-toast --save
全部配置
使用方式: 最好封装一个一个组件

  1. 函数方式
import Toast from 'react-native-root-toast';
let toast = Toast.show('This is a message', {
    duration: Toast.durations.LONG,
    position: Toast.positions.BOTTOM,
    shadow: true,
    animation: true,
    hideOnPress: true,
    delay: 0,
    onShow: () => {
        // 开始的那一刻 do anything code
    },
    onShown: () => {
        // 完成 do anything code
    },
    onHide: () => {
        // 隐藏的的那一刻  do anything code
    },
    onHidden: () => {
        // 隐藏 do anything code
    }
});
// 自动关闭
setTimeout(function () {
    Toast.hide(toast);
}, 500);
  1. 组件方式
import React from 'react-native';
import Toast from 'react-native-root-toast';

class Demo extends React.Component{
    constructor() {
        super(...arguments);
        this.state = {
            visible: false
        };
    }

    componentDidMount() {
        setTimeout(() => this.setState({
            visible: true
        }), 2000); // 2秒之后自动显示toast

        setTimeout(() => this.setState({
            visible: false
        }), 5000); //5秒之后自动隐藏toast
    };

    render() {
        return hello RN;
    }
}


  1. "react-native-scrollable-tab-view": "^0.8.0",
    平台适应性: IOS / Android
    安装: npm install react-native-scrollable-tab-view --save
  • 参考的全部配置
  • 实现下划线伸缩效果源码
  • 实现下划线伸缩效果说明
  • 实现自定义样式等1
  • 实现自定义样式等2

推荐使用方式,(官方的是ES5的Demo)

import ScrollableTabView from "react-native-scrollable-tab-view"
class Demo extends React.Component{
    // 最基础的方法, 跳转到第几个Tab, this.tabView.goToPage(0)
    render = () => {
        return ( {
                        this.tabView = tabView;
                    }}>
             促销
             头条
             教育
             资讯
             智能
)
    }
}
  1. "react-native-storage": "^0.2.3",

平台适应性: 全部

作用:本地持久存储的封装
安装:npm install react-native-storage@beta
使用: 增删改查,远程同步更新
一定要先初始化,同时注意,key永远不要用下划线

// 首先初始化
import Storage from 'react-native-storage';
import { AsyncStorage } from 'react-native';

const storage = new Storage({
  // 最大容量,默认值1000条数据循环存储
  size: 1000,

  // 存储引擎:对于RN使用AsyncStorage,对于web使用window.localStorage
  // 如果不指定则数据只会保存在内存中,重启后即丢失
  storageBackend: AsyncStorage,

  // 数据过期时间,默认一整天(1000 * 3600 * 24 毫秒),设为null则永不过期
  defaultExpires: 1000 * 3600 * 24,

  // 读写时在内存中缓存数据。默认启用。
  enableCache: true, // 你可以在构造函数这里就写好sync的方法 // 或是在任何时候,直接对storage.sync进行赋值修改 // 或是写到另一个文件里,这里require引入

  // 如果storage中没有相应数据,或数据已过期,
  // 则会调用相应的sync方法,无缝返回最新数据。
  // sync方法的具体说明会在后文提到
  sync: require('你可以另外写一个文件专门处理sync')
});

// 最好在全局范围内创建一个(且只有一个)storage实例,方便直接调用

// 对于web
// window.storage = storage;

// 对于react native
// global.storage = storage;

// 这样,在此**之后**的任意位置即可以直接调用storage
// 注意:全局变量一定是先声明,后使用
// 如果你在某处调用storage报错未定义
// 请检查global.storage = storage语句是否确实已经执行过了
  1. "react-native-swiper": "^1.5.13",

平台适应性: android和iOS

使用方法
参看说明文档

该组件常见BUG,

  • 使用ScrollView,ListView,FlatList一类的组件嵌套该组件,造成滚动过后的图片消失,需要设置ScrollView,ListView,FlatList的removeClippedSubviews={false}
    参考链接
  • 使用该组件,嵌套两个同级组件出现的问题,不渲染
    参考链接
  • 其他一些问题
  1. "react-native-vector-icons": "^5.0.0",
    参考链接
    说明: 通常用阿里矢量图代替

  2. "react-navigation": "^2.6.2",
    参考官网说明

  3. "react-navigation-redux-helpers": "^2.0.2",
    参考官网说明

  4. "react-redux": "^5.0.7",
    参考官网说明

  5. "redux": "^4.0.0",
    参考官网说明

  6. "redux-actions": "^2.4.0",
    参考官网说明

  7. "redux-form": "^7.4.2",
    参考官网说明

  8. "redux-thunk": "^2.3.0",
    说明: 异步中间件
    参考官网说明

其他推荐redux-saga,难度比thunk要难点

  1. "babel-polyfill": "^6.26.0",
    说明: ES6 的boundle
    参考官网说明
    使用,在index入口,引入即可

  2. "url-search-params-polyfill": "^5.0.0"
    说明: 类(或者说构造函数)UrlSearchParams的垫片
    使用,在index入口,引入即可

  3. "react-native-splash-screen": "^3.1.1",
    平台适应性: 全平台
    作用: 启动屏
    安装:npm i react-native-splash-screen --save
    react-native link react-native-splash-screen
    参考Android/IOS配置
    使用:

import SplashScreen from 'react-native-splash-screen'
 
class Demo  extends React.Component {
 
    componentDidMount() {
        // 在需要的页面,关闭启动屏
        SplashScreen.hide();
    }
}

你可能感兴趣的:(22个React-Native(RN)项目常用第三方组件使用方法和BUG汇总)