【REACT NATIVE 系列教程之十一】插件的安装、使用与更新(示例:REACT-NATIVE-TAB-NAVIGATOR)


本站文章均为 李华明Himi 原创,转载务必在明显处注明:
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/react-native/2294.html

本篇主要来详细介绍如何安装、升级插件及讲解一个react-native-tab-navigator的示例。

首先推荐一个插件网站:https://www.npmjs.com (此插件属于半官方维护的)

本文举例使用的插件:react-native-tab-navigator ,选项卡形式的导航

1. 通过https://www.npmjs.com找到我们想使用的插件,搜索react-native-tab-navigator

2. 我们可以看到插件介绍页面有详细的介绍,以及如何安装也有介绍,如下图:

444444

图中红色框选的是插件在github的源码页面地址

3. 下面对项目进行安装此插件

3.1 打开终端,cd 到项目根路径

3.2 使用命令:npm install react-native-tab-navigator �save进行安装,如下图:

3322111

3.3 安装成功后,你会在项目下的package.json文件内dependencies下看到(如下图):

asdf1

增加了一条:”react-native-tab-navigator”: “^0.3.2”

4. 更新插件的两种方式方式(上):

4.1: 打开终端,cd 到目标项目根路径

4.2 使用命令:npm installxxx@yyy�save �registryzzz

�save记录版本到项目的package.json下留底(一般最好都带上)

�registry指定 镜像源

xxx@yyy: @符号前是 插件名,@符号后是插件目标版本号

(如果目标版本号yyy填:latest 表示该插件的最新版本)

zzz:制定的镜像源地址

这里举例:

npm installreact-native-tab-navigator@latest �save

以上命令:更新react-native-tab-navigator插件到最新 ,且将版本号记录到项目的json文件

4. 更新插件的两种方式方式(下):

4.1 :利用插件检查模块最新版本:npm-check-updates

4.2 : 安装到项目中,然后利用命令:ncu 进行查看版本,如下图:

111er

1111err

5. 插件的使用:

5.1: 首先导入(使用node_modules下的模块,不需要路径):

importTabNavigatorfrom'react-native-tab-navigator';


5.2 : 绘制代码段:

render(){
return(
......
<TabNavigatortabBarStyle={styles.tab}>
<TabNavigator.Item
selected={this.state.selectedTab==='home'}
title="Home"
renderIcon={()=><Imagesource={require('./res/home_normal.png')}/>}
renderSelectedIcon={()=><Imagesource={require('./res/home_focus.png')}/>}
badgeText="61"
onPress={()=>this.setState({selectedTab:'home'})}>

<Viewstyle={{flex:1,backgroundColor:'#fff',justifyContent:'center'}}>
<Textstyle={{fontSize:20}}>我是第一个选项卡,直接书写出的视图!</Text>
</View>

</TabNavigator.Item>
<TabNavigator.Item
selected={this.state.selectedTab==='profile'}
title="Profile"
renderIcon={()=><Imagesource={require('./res/personal_normal.png')}/>}
renderSelectedIcon={()=><Imagesource={require('./res/personal_focus.png')}/>}
onPress={()=>this.setState({selectedTab:'profile'})}>

<TestPage/>

</TabNavigator.Item>
</TabNavigator>
......
);
}


TabNavigator.Item: 每个选项卡的组件名,其中属性解释:

selected:当前选项卡是否被选中

title:标题

renderIcon:icon

renderSelectedIcon:被选中时的icon

badgeText:提示的角标数字

onPress:点击后事件响应函数

当选项卡被选中后,才会显示选项卡绘制的视图内容

最后给出一个示例,两个文件

Main.js

importReact,{Component}from'react';
import{
View,Text,StyleSheet,Image,}from'react-native';

importTabNavigatorfrom'react-native-tab-navigator';
importTestPagefrom'./TestPage';

exportdefaultclassMainextendsComponent{
constructor(props){
super(props);
this.state={
selectedTab:'home'
};
}

render(){
return(
<Viewstyle={{flex:1}}>
<Textstyle={styles.himiTextStyle}>HimiReactNative系列教程</Text>
<TabNavigatortabBarStyle={styles.tab}>
<TabNavigator.Item
selected={this.state.selectedTab==='home'}
title="Home"
renderIcon={()=><Imagesource={require('./res/home_normal.png')}/>}
renderSelectedIcon={()=><Imagesource={require('./res/home_focus.png')}/>}
badgeText="61"
onPress={()=>this.setState({selectedTab:'home'})}>
<Viewstyle={{flex:1,justifyContent:'center'}}>
<Textstyle={{fontSize:20}}>我是第一个选项卡,直接书写出的视图!</Text>
</View>
</TabNavigator.Item>

<TabNavigator.Item
selected={this.state.selectedTab==='profile'}
title="Profile"
renderIcon={()=><Imagesource={require('./res/personal_normal.png')}/>}
renderSelectedIcon={()=><Imagesource={require('./res/personal_focus.png')}/>}
onPress={()=>this.setState({selectedTab:'profile'})}>
<TestPage/>
</TabNavigator.Item>
</TabNavigator>
</View>
);
}
};

varstyles=StyleSheet.create({
tab:{
height:100,backgroundColor:'#eee',alignItems:'center'
},himiTextStyle:{
backgroundColor:'#eee',color:'#f00',fontSize:30,marginTop:30,},});


TestPage.js

importReact,{Component}from'react';
import{
Text,View,}from'react-native';

importTabNavigatorfrom'react-native-tab-navigator';

exportdefaultclasstestPageextendsComponent{
constructor(props){
super(props);
this.state={
selectedTab:'home'
};
}

render(){
return(
<Viewstyle={{flex:1,justifyContent:'center'}}>
<Textstyle={{fontSize:20,color:'#f00'}}>我是TestPage,导入使用的!</Text>
</View>
);
}
};


效果演示(点击查看动态图):

user98

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...
在平时工作中的某些场景下,你可能想在整个组件树中传递数据,但却不想手动地通过 props 属性在每一层传递属性,contextAPI 应用而生。
楼主最近入职新单位了,恰好新单位使用的技术栈是 react,因为之前一直进行的是 vue2/vue3 和小程序开发,对于这些技术栈实现机制也有一些了解,最少面试...
我们上一节了了解了函数式组件和类组件的处理方式,本质就是处理基于 babel 处理后的 type 类型,最后还是要处理虚拟 dom。本小节我们学习下组件的更新机...
前面几节我们学习了解了 react 的渲染机制和生命周期,本节我们正式进入基本面试必考的核心地带 -- diff 算法,了解如何优化和复用 dom 操作的,还有...
我们在之前已经学习过 react 生命周期,但是在 16 版本中 will 类的生命周期进行了废除,虽然依然可以用,但是需要加上 UNSAFE 开头,表示是不安...
上一小节我们学习了 react 中类组件的优化方式,对于 hooks 为主流的函数式编程,react 也提供了优化方式 memo 方法,本小节我们来了解下它的用...
开源不易,感谢你的支持,❤ star me if you like concent ^_^
hel-micro,模块联邦sdk化,免构建、热更新、工具链无关的微模块方案 ,欢迎关注与了解
本文主题围绕concent的setup和react的五把钩子来展开,既然提到了setup就离不开composition api这个关键词,准确的说setup是由...
ReactsetState的执行是异步还是同步官方文档是这么说的setState()doesnotalwaysimmediatelyupdatethecomponent.Itmaybatchordefertheupdateuntillater.Thismakesreadingthis.staterightaftercallingsetState()apotentialpitfall.Instead,usecom