在新公司移动项目组做前端开发,项目组是做移动端APP的。
APP里的部分页面需要用H5来做,目前项目组只有我一人前端。
刚来的一周,因为暂时开发任务下不来,leader让看下目前流行的前端框架,当时举例说了个reactjs
之前使用过的框架只有angularjs,而且只是后台管理项目用到,感觉不适合在移动端使用
然后就看了下reactjs和vue.js, 这两个类似。
reactjs的介绍是:用于构建用户界面的JAVASCRIPT库
vue.js的介绍是:一个构建数据驱动的 web 界面的库,自身不是一个全能框架——它只聚焦于视图层
多数人认为reactjs是一个框架,虽然官方明确说明是一个库。
这会也不得不说下jquery,这个也有很多人认为是框架,在面试的时候也遇到过人这么说。
初步了解了下框架后,看了产品的原型图,以及可能要用H5开发的页面,并不是特别复杂,基本是展示页面和一些简单的交互,觉得都不算一个SPA。
用框架可能有点大材小用,并且框架也占有空间。
最后就确定使用zepto+underscore+require开发。
然后就是搭建框架和工程环境。
完成过后,UE还没有出H5相关的页面。
可能leader觉得reactjs特别好,或者说情有独钟,然后又让我再看下reactjs。(当然也有可能是因为没事干的原因)
心想,反正也没事干,干脆把reactjs学一遍。
于是就从头开始。
在上一个公司,当时的leader让我看了下reactjs,让看看组件开发模式怎么样,看是否能应用到项目中。当时也只是粗略的了解了下,后面就不了了之了
reactjs是干什么的
React 是一个 Facebook 和 Instagram 用来创建用户界面的 JavaScript 库
特点:
- 仅仅是UI
许多人使用React作为MVC架构的V层。 尽管React并没有假设过你的其余技术栈, 但它仍可以作为一个小特征轻易地在已有项目中使用 - 虚拟DOM
React为了更高超的性能而使用虚拟DOM作为其不同的实现。 它同时也可以由服务端Node.js渲染 - 而不需要过重的浏览器DOM支持 - 数据流
React实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单 - 组件开发
通过 React 你唯一要做的事情就是构建组件
hello world!
使用reactjs,需要引入文件:
1 | <script src="react.js"></script> |
不使用JSX语法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>hello world!!</title>
<script src="react.js"></script>
<script src="react-dom.js"></script>
<script src="browser.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
ReactDOM.render(
React.DOM.h1(null, 'hello world!'),
document.getElementById('example')
);
</script>
</body>
</html>使用JS语法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<html>
<head>
<meta charset="UTF-8" />
<title>hello world!</title>
<script src="react.js"></script>
<script src="react-dom.js"></script>
<script src="browser.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>
交互
最基本的数据输入的绑定:
1 | var App = React.createClass({ |
setState是触发UI更新的主要方法
setState() 不会立刻改变 this.state,而是创建一个即将处理的 state 转变。在调用该方法之后获取 this.state 的值可能会得到现有的值,而不是最新设置的值。
不保证 setState() 调用的同步性,为了提升性能,可能会批量执行 state 转变和 DOM 渲染。