ReactNative私有库
私有库
路径及执行的写法

npmjs库的发布详情查看:代码管理/库管理/npmjs/npmjs的发布


1)import 方法:
1 | import imgURL from './../images/photo.png'; |
(2)require方法 这种方法需要注意的是,require里只能写字符串,不能写变量。
1 | <img src={require('./../images/photo.png')} /> |
react通过state的数据显示style多个样式(三目运算)
| 序号 | 区别点 | React | ReactNative |
|---|---|---|---|
| 图片类 | img | Image | |
| 图片数据属性 | src | source | |
| 多style的设置 | {xx, yy} | {[xx,yy]} | |
| 获取屏幕的宽高 | React下获取width和height | ||
https://www.cnblogs.com/cisum/p/8401255.html
1 | yarn add [package]@[version] |
的[version]或[tag]将是什么被添加到您的package.json ,然后解决安装时依赖对。
1 | yarn add package-1@1.2.3 |
link失败,怎么办

诸如此类,其实是 react-native link react-native-gesture-handler 失败。
重复执行上述命令还是失败。怎么办?
答:直接手动remove掉RNGestureHandler.xcodeproj,然后再手动添加吧。
查找地址:https://www.npmjs.com/package/
其他常用库文章:React Native插件系列之插件汇总
| 类型 | 库 | Stat ⭐️ |
|---|---|---|
| 导航 | react-navigation 及其Navigation prop reference(导航属性) |
|
| 日历 | react-native-calendars | |
| Tab | react-native-tab-navigator⭐️2187 | |
| 日期计算 | moment(github)⭐️41285 官网地址 |
|
| 地图 | react-native-amap3d(github)⭐️690 | |
| 图片浏览 | react-native-image-viewer⭐️1361 | |
| 轮播图 | react-native-swiper⭐️7776 | |
| 图片选择 | react-native-image-picker⭐️5311 | |
| 日期选择 | react-native-datepicker ⭐️1585 | |
| 进度显示 | react-native-progress⭐️2358 | |
| Toast | react-native-root-toast⭐️1191 | |
| 网页 |
Picker相关
link方法:
官网文章:
参考文章:
在安装3.x后,需要将最外层的包裹形式修改为
createAppContainer在之前的版本中,使用
createStackNavigator后,就会自动实现createAppContainer,但在新版本中,需要手动使用createAppContainer来包裹最外层的路由。
使用
1 | #import { WebView } from 'react-native'; # 被废弃的 |
如果使用react-native中的WebView会提示如下警告:

意思是webwiew要废了.不用了.
于是安装他们推荐的,用下面的命令
yarn add react-native-webview
react-native link react-native-webview
1 | npm install react-native-datepicker --save |
date:设置初始显示的日期
mode:显示的模式,date,datetime,time
format:设置日期格式,默认为’YYYY-MM-DD’
confirmBtnText:确定按钮的显示名称
cancelBtnText:取消按钮的显示名称
minDate:显示的最小日期
maxDate:显示的最大日期
duration:时间间隔
onDateChange:日期变化时触发的事件
placeholder:占位符
| 类型 | antd | antd-mobile | @ant-design/react-native |
|---|---|---|---|
| 官网地址 | https://ant.design/docs/react/introduce-cn | https://mobile.ant.design/docs/react/introduce-cn | https://rn.mobile.ant.design/docs/react/introduce-cn |
| 安装命令 | npm install antd –save | npm install antd-mobile –save | npm install @ant-design/react-native –save |
| 特性和优势 | UI 样式高度可配置,拓展性更强,轻松适应各类产品风格 |
参考文章:ES6 export 和 export default的区别
export 和 export default的区别| 导出方式 | 使用方式 |
|---|---|
| export | 用户必须需要知道所要加载的变量名,否则无法加载。 |
| export default | 但是用户肯定不愿意去阅读子组件看看导出名称叫啥,然后回来导入。所以就有了 export default。 |
当import命令接受一对大括号,里面指定要从其他模块导入的变量名。大括号里面的变量名,必须与被导入模块对外接口的名称相同。
export,而不是export default的时候1 | // 使用方式1:常规方法 |
export default的时候可以用任意名称指向greeting.js输出的方法,这时就不需要知道原模块输出的变量名。
1 | // 使用export default的时候可以有如下写法 |
需要注意的是,这时import命令后面,不使用大括号。常见于export default createAppContainer(UIHomeNavigation);
参考文章:
需求距离:日期连接符,根据参数来判断是用直线还是波浪线。
定义:
1 | class DateConnectView extends React.Component { |
调用的时候:
1 | <DateConnectView showWave={false} /> |
ES5语法React.createClass会自动绑定this,ES6的写法,不再自动绑定this。
参考文章:
如果需要传参数,则采用箭头函数的写法。
出现的原因是return的内容内组件的首字母不是大写,比如如果提示View config not found for name abc,则只需将abc换成Abc即可解决。
export default class声明的类只能有一个,并且被引用的类要符合执行顺序
所以,请检查export default class 是不是太多了。
Module does not exist in the module map 即
在Haste模块映射中或在这些映射中不存在,一般存在于对同一级目录的引用
1 | import ButtonFactory from 'cjdemobuttonfactory' // 错误 |
1 | <Text style={{ |
VirtualizedList: missing keys for items, make sure to specify a key property on each item or provide a custom keyExtractor.
它警告我们每个item 要有不同的key 。默认情况下每行都需要提供一个不重复的key属性。你也可以提供一个keyExtractor函数来生成key。
1 | <FlatList |
Warning: Failed child context type: Invalid child context virtualizedCell.cellKey of type number supplied to CellRenderer, expected string.
1 | keyExtractor={(item, index) => index} //会有警告⚠️ |
TypeError: undefined is not an object (evaluating ‘this.props.navigation.navigate’)
检查下是不是导航栏不是在该类,而是在其他类上。常见于你在子组件中调用了该属性而发生错误。
Metro Bundler has encountered an internal error, please check your terminal error output for more details
可能原因:路径出错,如下:
1 | icon:require('../image/home_n.png'), |
同理你要添加如react-native-device-info库,则在终端cd到package.json后,执行npm install --save react-native-device-info,其就会在package.json中添加。
添加
1 | cd xxx |
参考文章:
布局
flex:1 ,那么这是什么意思呢?
可以理解为比重
· 如果同级组件上只有一个,并且设置了 flex:1,那么这个组件相当于分配了全部空间。
· 如果同级组件上只有两个,并且这两个都设置了 flex:1,那么相当于这两个组件平均分配了全部空间。
· 如果同级组件上只有两个,并且第一个组件设置了 flex:1,第二个组件设置了 flex:2,那么相当于第一个组件占据全部空间的三分之一,第二个组件占据全部空间的三分之二。
· 如果没有设置 flex 属性,那么这个组件按需分配空间。
同时有flex、width、height时候,flex 与 width/height 的优先级
flex的优先级 > width/height。具体,
①、当组件是竖向排列时候,flex的优先级 > height,即height的设置会失效;
②、当组件是横向排列时候,flex的优先级 > width,即width的设置会失效;
如还有不懂此相关的文章可参考:https://www.jianshu.com/p/025f4ad7a4a4
flexDirection enum('row', 'column','row-reverse','column-reverse')flexDirection属性定义了父视图中的子元素沿横轴或侧轴方片的排列方式。
| 类型 | 含义 | 图形举例 |
|---|---|---|
| column(默认的排列方式) | 从上向下排列 | |
| column-reverse | 从下向上排列 | |
| row | 从左向右依次排列 | |
| row-reverse | 从右向左依次排列 |
图形举例:

flexWrap enum('wrap', 'nowrap')flexWrap属性定义了子元素在父视图内是否允许多行排列,默认为nowrap。
| 类型 | 含义 | |
|---|---|---|
| nowrap (默认) |
flex的元素只排列在一行上,可能导致溢出。 | |
| wrap | flex的元素在一行排列不下时,就进行多行排列 | |
| wrap-reverse | 换行,第一行在下方 |
图形举例:

代码举例:
1 | <View style={ {flexWrap:'wrap',flexDirection:'row',backgroundColor:"darkgray",marginTop:20}}> |
| 类型 | 含义 | row举例 | column举例 |
|---|---|---|---|
| flex-start (default) |
从行首开始排列。每行第一个弹性元素与行首对齐,同时所有后续的弹性元素与前一个对齐 | ![]() |
![]() |
| center | 伸缩元素向每行中点排列。每行第一个元素到行首的距离将与每行最后一个元素到行尾的距离相同。 | ![]() |
![]() |
| flex-end | 从行尾开始排列。每行最后一个弹性元素与行尾对齐,其他元素将与后一个对齐。 | ![]() |
![]() |
| space-between | 在每行上均匀分配弹性元素。相邻元素间距离相同。每行第一个元素与行首对齐,每行最后一个元素与行尾对齐。 | ![]() |
![]() |
| space-around | 在每行上均匀分配弹性元素。相邻元素间距离相同。每行第一个元素到行首的距离和每行最后一个元素到行尾的距离将会是相邻元素之间距离的一半。 | ![]() |
![]() |
其他图:

代码使用举例:
1 | <View style={ {justifyContent:'center',flexDirection:'row',backgroundColor:"darkgray",marginTop:20}}> |
| 类型 | 比较 | 注意 |
|---|---|---|
| justifyContent | 决定其子元素沿着主轴的排列方式 | |
| alignItems | 决定其子元素沿着次轴的排列方式 |
alignItems决定了子元素在次轴方向的排列方式(此样式设置在父元素上)。例如若子元素本来是沿着竖直方向排列的(即主轴竖直,次轴水平),则alignItems决定了它们在水平方向的排列方式。此样式和CSS中的align-items表现一致,默认值为stretch。
alignItems enum('flex-start', 'flex-end', 'center', 'stretch')alignItems属性以与justify-content相同的方式在侧轴方向上将当前行上的弹性元素对齐,默认为stretch。
| 类型 | 含义 | |
|---|---|---|
| stretch (默认) |
弹性元素被在侧轴方向被拉伸到与容器相同的高度或宽度。 | |
| flex-start | 元素向侧轴起点对齐 | |
| flex-end | 元素向侧轴终点对齐 | |
| center | 元素在侧轴居中。如果元素在侧轴上的高度高于其容器,那么在两个方向上溢出距离相同。 |
在{justifyContent:'center',flexDirection:'row'}的情况下:

| 类型 | 比较 | 注意 |
|---|---|---|
| alignItems | 决定了子元素在次轴方向的排列方式(此样式设置在父元素上) | |
| alignSelf | 决定了该元素在父元素的次轴方向的排列方式(此样式设置在子元素上) | 其值会覆盖父元素的alignItems的值 |
React Native 中,position 默认值为 relative,即相对布局。
position enum(‘absolute’, ‘relative’)属性设置元素的定位方式,为将要定位的元素定义定位规则。
| 类型 | 含义 | |
|---|---|---|
| relative (默认值) |
生成相对定位的元素,相对于其正常位置进行定位。因此,”left:20” 会向元素的 LEFT 位置添加 20 像素。 | |
| absolute | 生成绝对定位的元素,元素的位置通过 “left”, “top”, “right” 以及 “bottom” 属性进行规定。 |
默认情况下,使用position: 'absolute'后,后面的元素会默认覆盖在前面的元素之上。
| 类型 | 含义 | |
|---|---|---|
| top | 元素的上外边距边界与其包含块上边界之间的偏移 | |
| left | 元素左外边距边界与其包含块左边界之间的偏移 | |
| bottom | 元素的下外边距边界与其包含块下边界之间的偏移 | |
| right | 元素右外边距边界与其包含块右边界之间的偏移 | |
| width | 元素的宽 | |
| height | 元素的高 |
| 父组件的前提下 | 对子组件进行的设置 | 造成子组件结果 |
|---|---|---|
| 如果父组件设置了 flex 值 | 子组件设置了 flex 值的同时,也设置了高度值 | 则高度无效 |
| 如果父组件设置了 flex 值 | 子组件没有设置 flex 值,只设置了高度值, | 则子组件高度有效 |
| 类型 | 含义 | |
|---|---|---|
| marginTop | 上外边距 | |
| marginLeft | 左外边距 | |
| marginBottom | 下外边距 | |
| marginRight | 右外边距 | |
| marginHorizontal | 左右外边距 | |
| marginVertical | 上下外边距 |
| 类型 | 含义 | |
|---|---|---|
| paddingTop | 上内边距 | |
| paddingLeft | 左内边距 | |
| paddingBottom | 下内边距 | |
| paddingRight | 右内边距 | |
| paddingHorizontal | 左右内边距 | |
| paddingVertical | 上下内边距 |
| 类型 | 含义 | |
|---|---|---|
| borderTopWidth | 顶部边框宽度 | |
| borderLeftWidth | 左边框宽度 | |
| borderBottomWidth | 底部边框宽度 | |
| borderRightWidth | 右边框宽度 | |
| borderColor | 边框颜色 | |
| border<Bottom|Left|Right|Top>Color | 各个方向边框的颜色 |
默认情况下,使用position: 'absolute'后,后面的元素会默认覆盖在前面的元素之上。
如果在Android上面,不显示地给Text添加color,那么显示出来的字体颜色就是灰色。跟iOS的表现不一致;
解决方案:
方案一:给每个Text都设置color
不足:每次都设置color。比较繁琐
方案二:写一个自定义组件
比如MyText,这个Text设置颜色,每次使用xxx就默认为你设置的颜色了。
不足:多出来了一个新的组件,也比较繁琐。
多出来了一个新的组件,也比较繁琐。
方案三:设置默认props
在入口文件里面写上默认的style,比如:
Text.defaultProps.sytle = { 'color': '#212121'}
常用的通知React数据变化的方法是调用**setState(data,callback)**,这个方法会合并data到this.state,并重新渲染组件。渲染完成后,调用可选的callback回调。大部分情况不需要提供callback,因为React会负责吧界面更新到最新状态。
详情查看:附一:StateEasyPage.js 与 StateNormalPage.js
| 类型 | this.state.xxx=’’ | this.setState({xxx:’’}) |
|---|---|---|
| 作用 | this.state通常是用来初始化state的 | this.setstate是用来修改state值的 |
| 注意 | 再次调用时候,之前的state会被覆盖掉 | 再次调用时候,只会替换掉相应的state值 |
所以,自定义组件的时候,因为其需要传的参数是会被变化的,所以,我们在自定义组件中,不能使用state来更新,而是自定义组件中使用props,结合外部调用它的来处理。
this.setState({})会触发render方法,重新渲染界面。而this.state.xxx=’’ 不会重新加载UI。
this.setState({})是异步的
参考文章:
1 | //StateEasyPage.js |
丰富一下,使其可以来回切换:
1 | //StateNormalPage.js |