写给iOS开发者看的React知识

引言

无论是iOS还是Android开发者会越来越发现,纯粹的原生开发越来越少:

  • APP中为了拉取新用户,会添加诸如“分享到微信,小程序,红包”等功能,此时需要和H5合作。
  • APP急于上一个新功能,用APP时间太大,先用个H5页面做个尝试,需要在APP中添加入口跳转一个Web页面。
  • Web页面调取系统的蓝牙等功能不方便,又需要原生支持。
  • iOS由于WebView导致的崩溃率上升需要H5同事帮助处理。
  • 由于每个开发周期中经常依赖H5项目组,让我们的时间预估变得越来越难,稍有不慎就会延期。

因此学习一些H5知识变得迫在眉睫,本文就对H5的发展做个大致的梳理。

HTML基础

首先我们要知道什么是H5。H5,即HTML5,是HTML的第五个版本。新建一个新文件,在里面输入

<html>
<head>
    <title>百度一下,你就知道</title>
</head>
<body>
    <center>
        <img src="https://www.baidu.com/img/bd_logo1.png" width="100"></img>
        <p></p>
        <input type="" name=""></input>
        <button>搜索</button>
    </center>
</body>
</html>

保存为扩展名为html类型的文件,使用浏览器打开,就实现了一个简易版的百度首页。我们会发现,这是个静态页面,点击搜索按钮并没有任何相应。但有了JavaScript以后,页面就有了一定的动态效果:

<button type="button" onclick="alert('search!')">搜索</button>

将这行代码替换上面的第10行<button>搜索</button>,再点击效果就会发现有个弹框。这里的alert函数就是JavaScript(以下简称JS)里的方法。更多的方法可以在w3school上学习。
JS在创建之初就是用于实现H5页面的动态效果,以及部分前端逻辑(例如检测输入的手机号是否合法),但历经多年的发展以后现在已经渗透到了软件开发的方方面面,尤其是nodejs的出现,打破了前后端的界限,让JS能在后端开发中拥有一席之地。因此,现在的H5开发者倾向于说,他们是FE开发者----Front to End(即前端到后端),下面我也将使用“FE”这个名词替代“H5”。这里我随便引用了一张跟JS相关的概念图:

JS框架

这张图包含了FE相关的概念,包含打包,层叠样式表等相关概念。但初入H5开发的我们千万不要被各种框架以及名词整的晕头转向。下面我们通过类比iOS中相关的概念来介绍FE。
HTML、CSS、JS:刚开始学iOS开发的我们一定要学习Objective-C语言,这是我们后续开发的基础;同理,FE需要的基础就是HTML,CSS以及JS。正如我们开头使用到的百度的Demo一样,我们需要先了解HTML以及JS的基本语法。比较幸运的是,HTML、CSS都是非常容易入门的,大概一周我们就能开发一个静态网站了。主要是JS的语言需要花一定时间了解,相信看完w3school也有个大致的了解了。

Nodejs

Nodejs: nodejs是一个JS运行环境,有很多种写法,标准写法是node.js,我们也可以写成nodenodejs类似于iOS中Objective-C的运行时(Runtime)。Objective-C的运行时将我们的代码翻译成C语言,正如node将JS进行了一些封装。下面我们看一个nodejs的helloworld程序:

var http = require('http');
server = http.createServer(function (req, res) {
res.writeHeader(200, {"Content-Type": "text/plain"});
res.end("Hello World\n");
});
server.listen(8000);
console.log("httpd start @8000");

这段代码的作用就是在浏览器中输出Hello World

nodejs的helloworld

要执行这段代码需要

  1. 先安装nodejs环境:brew install node
  2. 将Helloworld的代码保存为扩展名为js的文件,这里保存为index.js
  3. 运行程序 node index.js
  4. 在浏览器中输入地址localhost://8000即可看到效果

到这里,我们算是对nodejs有了一个初步的了解(如图)。

Node服务器

npm

npm 是一个包管理器,安装完node后就可以使用该命令,它让 JavaScript 开发者分享、复用代码更方便(类似iOS中的CocoaPods)。CocoaPods中我们需要编写PodFile来制定项目以及三方库,同理,npm需要指定package.json来声明需要依赖的三方库。一个常见的package.json如下:

{
  "name": "shop",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "test": "jest"
  },
  "dependencies": {
    "react": "^16.3.0-alpha.1",
    "react-native": "0.54.2",
    "uuid": "^3.2.1"
  },
  "devDependencies": {
    "babel-jest": "23.0.0-alpha.0",
    "babel-preset-react-native": "4.0.0",
    "jest": "22.4.2",
    "react-test-renderer": "^16.3.0-alpha.1"
  },
  "jest": {
    "preset": "react-native"
  }
}

这个package.json中指定了

  • 项目名称: shop
  • 依赖的三方库(dependencies字段):reactreact-native
  • scripts:支持的脚本,默认是一个空的 test

当然,package.json可以通过npm init命令生成。

React

接下来我们开始讲解本文的主题:React

React:React是Facebook内部的一个JavaScript类库,可用于创建Web用户交互界面。相信大家已经能猜到,React大概类似于iOS开发中的Cocoa库(UIKit)库(如下图)。

react框架

推荐一个React教程:React 教程,React库的一个简单的Demo如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Hello React!</title>
    <script src="https://cdn.bootcss.com/react/15.4.2/react.min.js"></script>
    <script src="https://cdn.bootcss.com/react/15.4.2/react-dom.min.js"></script>
    <script src="https://cdn.bootcss.com/babel-standalone/6.22.1/babel.min.js"></script>
  </head>
  <body>
    <div id="example"></div>
    <script type="text/babel">
      ReactDOM.render(
        <h1>Hello, world!</h1>,
        document.getElementById('example')
      );
    </script>
  </body>
</html>

可以看到,这次的HelloWorld页面通过React渲染出来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,861评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,263评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,033评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,999评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,000评论 6 400
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,483评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,850评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,827评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,366评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,404评论 3 346
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,525评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,130评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,853评论 3 338
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,293评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,426评论 1 276
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,082评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,590评论 2 366

推荐阅读更多精彩内容