一步一步教你写RN小程序!
时间过得真快,一转眼已经快3年了!
1.我的第一个应用程序
还记得2014年初写的第一个iOS小程序,是给别人写的独立相册。这也是我开发的第一个完整的应用程序。虽然功能很少,但我还是按耐不住心里的激动。我太激动了。现在开始学习React Native,所以现在对React Native有了一些了解。我将使用在线界面来开发一个小程序。现在我将向您展示如何编写这个程序!接口是知乎的API,简单只搞定。您可以从这里开始。也算是给大家一个入门指南。稍后我会将源码放到我的github上。早期的项目一定很简单,后期慢慢优化吧。好了,废话不多说,坐稳了,开车吧! ! ! ! !
首先你需要一个框架,可以省时省力,不再重复发明轮子。
(1)框架
我们将不再构建框架。之前写了一个很简单的框架,放在github上。我们只需下载并使用它即可。下载地址在我的github上。这个框架是基于react-Native-tab-navigator,要运行这个程序,我们首先要做的是打开终端配置环境
$npm install react-native-tab-navigator --save
然后我们就可以打开文件并运行程序了
(2)更改姓名
用Xcode打开文件navtabbar.xcodeproj,进入AppDelegate.m文件并放入
模块名称:@“navtabbar”
初始属性:nil
启动选项:启动选项]; 将
中的moduleName修改为你想要的名称,然后将plist文件中的Bundle名称修改为你修改后的名称。最后也是最重要的一步,打开index.ios.js文件修改注册入口,
AppRegistry .registerComponent('你修改的名字', () => NavIndex)
现在iOS App name已修改,可以运行看看是否修改成功!
2。首页建设
(1)首页界面代码修改
进入login.js文件,删除
然后添加图片,稍后我们要为主页设置背景图片,添加
可触摸不透明度、
尺寸、
文本输入
OK,只需添加这些组件即可!
(2)界面搭建
首先我们在src文件夹下新建一个images文件夹来存放我们的图片
现在您可以找到一些图片并保存它们。
然后直接登录即可,当然只是一个界面
placeholderTextColor='灰色'
defaultValue='Demon404'
/>
placeholderTextColor='橙色'
默认值=''
/>
<按钮样式={无数字噪音键1028}
按钮标题=“登录” />
这里的FormText是我自己写的一个小控件。
可以看到下面的界面效果
由于没有发帖请求,所以每个人都可以简单地享受这个页面。反正下一页和本页没有关系了……
(3)首页建设
首页只是一个Tabbar界面。目前,我们正在考虑拥有三个模块!我们将来会考虑删除它们。嗯,就是这么任性!
一个是推送文章模块,一个是搜索模块,最后一个是设置模块。
我们先来看看文章模块的主页
返回(
<图像风格={无数字噪音键1026}
来源={{uri: data.pic}}
/>
);
} 渲染(){
返回(
<列表视图
initiaListSize={1}
onEndReachedThreshold={10}
数据源={this.state.dataSource}
renderRow={this.cellRow.bind(this)}
样式={styles.listView}
/>
);
}
这是我们ListView页面的代码。简单抓取一下就看到了知乎的一个界面页面,
如何实现数据同步?
这个是关于组件的生命周期的:一般来说,一个组件类是通过扩展Component
创建的,并提供了render
方法以及其他可选的生命周期函数,组件相关定义事件或方法。
简单说一下生命周期函数
componentWillMount:只会在加载前调用一次,
render
之前调用
componentDidMount:只会在加载完成后调用一次,
会在render
之后调用
componentWillUnmount:卸载组件时调用,
constructor(props, context):构造函数,创建组件时调用一次
这些是目前唯一在使用的。当然,这些并不是声明周期调用的唯一函数。这些我们以后再谈。
这里,我们简单的使用componentDidMount,
第一个var GET_URL = 'http://www.introzo.com/getposts';
然后在listView页面定义数据解析方法
componentDidMount(){
this.fetchData();
}
实施:
获取(GET_URL)
//ES6写法:左边代表输入参数,右边是逻辑处理和返回结果
.then((response) => response.json())
.then((responseData) => {
this.setState({
数据源:this.state.dataSource.cloneWithRows(responseData.posts),
});
})
.done();
}
constructor(props) {
super(props);
//state是内部维护的状态。我们刚刚输入空来加载空视图
this.state = {
dataSource: new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2,
}),
};
}
,然后根据上面的RowData,就可以实现如下页面效果
1.
图1是我们搭建的首页,图2是详情页。
图1和图2的实现原理是一样的。他们都是使用listView来构建页面,那么如何传递值呢?
Nav有一个属性renderScene,回调方法有两个参数route和navigator。
大家还记得{...route.params},
我们要做的就是当第一页推送到第二页时这样写,
组件:细节,
参数:{nextdata:行数据},
})
在第二页,可以直接写this.props.nextdata来调用传入的rowdata。那么第二页的实现是不是很难呢?这里就不多说了,
ps:你可以想想为什么renderRow={this.cellRow.bind(this)}这么写?是不是也可以先 renderRow={this.cellRow()} ?
(4)搜索页面建设
我们先看一下图。该模块暂时实现了两个页面的功能。以后我们会慢慢添加。别担心......
首先,我在搜索框中使用了textinput。其实功能是一样的。点击放大镜,将输入框中的内容拼接到界面上,并传递到下一页。直接用接收到的接口就可以解析下一页了。那么如何获取textinput中的值呢?
我们看一下代码
样式={styles.inputStyle}
placeholder="请输入搜索条件!"
onChangeText={(text) => this.setState({text})}
/> 构造函数(道具){
超级(道具);
this.state = {text: ''};
}
搜索用户(){
console.log(this.state.text);
看过文档的朋友应该都知道onChangeText是做什么的。我不会详细介绍。列表页面与前面的页面一样。
3.终于
-->相关文章
- 10-06 郭明錤:预计歌尔将恢复苹果AirPods Pro
- 10-06 小米海外首发5G CPE Pro:采用高通CPU,
- 10-06 小米13至尊徕卡影像旗舰手机跑分出炉:骁龙8代二代
- 10-06 研究报告:全球 75% 的公司禁止或考虑禁止在工作
- 10-06 清华大学发布《大语言模型综合性能评估报告》:GPT
- 10-06 科学家研发人工智能声纳眼镜:可识别唇读,准确率达9
- 10-06 任天堂公布新一轮Switch Online游戏阵容
- 10-06 任天堂宫本茂:下一代Switch主机将提高向后兼容
- 10-06 Switch 卖不动了,任天堂遭遇中年危机
- 10-06 需要导出100多个Excel报表,所以实现起来足够
- 10-06 for循环内嵌套for循环,你需要了解的代码性能优
- 10-06 for循环内嵌套for循环,你需要了解的代码性能优
- 10-06 IntelliJ IDEA的神级插件,由ChatG
- 10-06 IntelliJ IDEA的神级插件,由ChatG
- 10-06 Service层的异常是抛给Controller层
- 10-06 华为p50功耗排行查看教程
- 10-06 Huawei Share连接电脑教程
- 10-06 华为鸿蒙系统支持的手机型号列表
- 10-06 Python Joblib库使用方法总结
- 10-06 Python标准类库
- 最近发表