学习就如同长跑,要想跑的远,就不能跑得太快。javascript
这段时间了解了一些前端方面的知识,而且用 React Native 写了一个简易新闻客户端 Demo。css
React Native 和原生开发各有所长,具体就不细说。混合使用能充分发挥各自长处,惟一的缺憾就是 React Native 和原生通讯过程相对不那么友好。html
在这里分享一下学习过程当中我的认为比较重要的知识点和学习资料,本文尽可能写得轻一些,但愿对读者可以有所帮助。前端
有些前端经验的小伙伴学起 React Native 就像老马识途,东西都差很少,变来变去也玩不出什么花样。html5
HTML5:H5 元素对比 React Native 组件,使用方式一模一样。java
CSS:React Native 的 FlexBox 用来为组件布局的,和 CSS 亲兄弟关系。react
JavaScript:用 JavaScript 写,能不了解一下吗? JavaScript 之于 React Native 就如同砖瓦之于摩天大楼。ios
React JSX:React 使用 JSX 来替代常规的 JavaScript。JSX 是一个看起来很像 XML 的 JavaScript 语法扩展。git
React Native 社区相对比较成熟,中文站的内容也比较全面,从入门到进阶,环境安装到使用指南,学习 React Native 推荐从官网 reactnative.cn 开始。FlexBox 布局、组件、API 建议在该官网查看,注意网页顶部能够切换 React Native 的历史版本。github
App Transport Security Settings
,容许 http 请求)class Clock extends React.Component {
// 构造函数 一般进行一些初始化操做 如定义 state 初始值
constructor(props) {
super(props);
}
// 组件已挂载
componentDidMount() {}
// 组件即将被卸载
componentWillUnmount() {}
// 渲染函数
render() {
return (
<View></View>
);
}
}
复制代码
一个组件全部的数据来自于 Props 与 State ,分布是外部传入的属性和内部状态。
Props 是父组件给子组件传递数据用的,Props 由外部传入后没法改变,能够同时传递多个属性。
// 父组件 传递一个属性 name 给子组件
<Greeting name='xietao3' />
// 子组件使用父组件传递下来的属性 name
<Text>Hello {this.props.name}!</Text>
复制代码
State :用来控制组件内部状态,每次修改都会从新渲染组件。
// 初始化 state
constructor(props) {
super(props);
this.state = { showText: 'hello xietao3' };
}
// 使用 state
render() {
// 根据当前showText的值决定显示内容
return (
<Text>{this.state.showText}</Text>
);
}
// 修改state,触发 render 函数,从新渲染页面
this.setState({showText: 'hello world'});
复制代码
举个栗子(若是理解了就跳过吧):
咱们使用两种数据来控制一个组件:props 和 state。 props 是在父组件中指定,并且一经指定,在被指定的组件的生命周期中则再也不改变。 对于须要改变的数据,咱们须要使用 state 。
通常来讲,你须要在 constructor
中初始化 state ,而后在须要修改时调用setState方法。
假如咱们须要制做一段不停闪烁的文字。文字内容自己在组件建立时就已经指定好了,因此文字内容应该是一个 prop 。而文字的显示或隐藏的状态(快速的显隐切换就产生了闪烁的效果)则是随着时间变化的,所以这一状态应该写到 state 中。
说到组件就不得不说 React Native 的组件化思想,尼古拉斯 · 赵四 曾经说过,组合因为继承。简单来讲就是多级封装嵌套、组合使用,提升基础组件复用率。
组件怎么用?
授人以鱼不如授人以渔,点击这里打开官方文档 ,在左边导航栏中找到你想使用的组件而且点击,里面就有组件的使用方式和属性的详细介绍。
关于 API
建议写第一个 Demo 以前把全部 API 浏览一遍,磨刀不误砍柴工,不必定要会用,但必定要知道这些提供了哪些功能,后面开发中可能会用得上。API 列表一样能够在官网左边导航栏中找到。
如下内容不建议在第一个 Demo 中使用:
Redux(中文教程、英文教程) 是 JavaScript 状态容器,提供可预测化的状态管理。
部分推荐教程:
React Native 热更新的发动机,接入的时候绕了不少圈圈,后面发现接入还挺方便的。CodePush 除了可使用微软提供的服务进行热更新以外,还能够自建服务器进行热更新。
推荐教程:
填坑:
3.2 在 React Native 中发消息通知给原生端(因为RN调用原生端是异步的,最好在回调中经过通知把消息传递到具体的类)
3.3 在原生端发消息通知给 React Native (建议在Manager中写一个类方法,这样外部也能够灵活发送通知)
这里实际上是有 Demo 的,可是还没整理好🤦️。
有时候一会儿看到好多感兴趣的东西,容易分散注意力,在未到达必定水平以前建议不要想太多,入门看官网就足够了。当你掌握了那些知识以后,你就能够拓展一下你的知识库了。
MonkeyNews,纯 React Native 新闻客户端,部分参考知乎日报,而且使用了其部分接口 因为是练手项目,仅供参考,这里附上 GitHub 地址,感兴趣的能够了解(star)一下。
Common
MKSwiper.js
MKNewsListItem.js
MKImage.js
MKPlaceholderView.js
MKThemeListItem.js
MKLoadingView.js
...
Config
MKConstants.js
Pages
Home
MKHomePage.js
MKNewsDetailPage.jsCategory
MKCategoryPage.js
MKThemeDetailPage.jsUserCenter
MKUserCenterPage.js
Services
MKServices.js
APIConstants.js
Styles
commonStyles.js
在对 React Native 有了一些了解以后,我的感受目前 React Native 的情况很难替代原生开发,至少现阶段还不行。
我的认为的缺点:React Native 的双端运行的优势并不明显,不少原生 API 使用起来都比较麻烦,很大程度上抵消了双端运行带来的开发效率提高,这种状况下我甚至更愿意用原生 iOS 和 Android 各写一套。
优势:React Native 和原生组合使用,经过动态路由动态在原生页面和 React Native 页面之间切换,能够在原生页面出现 bug 的时候切换至 React Native 页面,或者比较简单的页面直接使用 React Native 开发都是很是不错的。
总之, React Native 也是能够大有做为的。