ReAct 基本语法
2015-11-03 11:55
573 查看
一、ReactDOM.render()
ReactDOM.render 是 React 的最基本方法,用于将模板转为 HTML 语言,并插入指定的 DOM 节点。ReactDOM.render( <h1>Hello, world!</h1>, document.getElementById('example') );
上面代码将一个 h1 标题,插入 example 节点(查看 demo01),运行结果如下。
结构
在JSX文件中,可以直接通过React.createClass来定义组件:
var ButtonComponent = React.createClass({ getDragonKillingSword: function(){ //送宝刀 }, render: function(){ return (<button onClick={this.getDragonKillingSword}>屠龙宝刀,点击就送</button>); } });
父组件可以直接将需要执行的函数传递给子组件:
全选
复制放进笔记
<ButtonComponent clickCallback={this.getSwordButtonClickCallback}/>
然后在子组件中调用父组件方法:
var ButtonComponent = React.createClass({ render: function(){ return (<button onClick={this.props.clickCallback}>屠龙宝刀,点击就送</button>); } });
子组件通过
this.props能够获取在父组件创建子组件时传入的任何参数,因此
this.props也常被当做配置参数来使用
组件状态
在React中,每个组件都有自己的状态,可以在自身的方法中通过
this.state取到,而初始状态则通过
getInitialState()方法来定义,比如这个屠龙宝刀按钮组件,它的初始状态应该是没有点击过,所以
getInitialState方法里面应当定义初始状态
clicked: false。而在点击执行的方法中,应当修改这个状态值为
click: true:
全选
复制放进笔记
var ButtonComponent = React.createClass({ getInitialState: function(){ //确定初始状态 return { clicked: false }; }, getDragonKillingSword: function(){ //送宝刀 //修改点击状态 this.setState({ clicked: true }); }, render: function(){ return (<button onClick={this.getDragonKillingSword}>屠龙宝刀,点击就送</button>); } });
组件依赖
组件依赖的处理一般分为两个部分:组件加载和组件使用
组件加载
React没有提供相关的组件加载方法,依旧需要通过<script>标签引入,或者使用模块加载器加载组件的JSX和资源文件。
组件使用
如果细心,就会发现其实之前已经有使用的例子了,要想在一个组件中使用另外一个组件,比如在ParentComponent中使用
ChildComponent,就只需要在
ParentComponent的
render()方法中写上
<ChildComponent />就行了,必要的时候还可以传些参数。
疑问
到这里就会发现一个问题,React除了只处理了结构和逻辑,资源也不管,依赖也不管。是的,React将近两万行代码,连个模块加载器都没有提供,更与Angularjs,jQuery等不同的是,他还不带啥脚手架...没有Ajax库,没有Promise库,要啥啥没有...
虚拟DOM
那它为啥这么大?因为它实现了一个虚拟DOM(Virtual DOM)。虚拟DOM是干什么的?这就要从浏览器本身讲起如我们所知,在浏览器渲染网页的过程中,加载到HTML文档后,会将文档解析并构建DOM树,然后将其与解析CSS生成的CSSOM树一起结合产生爱的结晶——RenderObject树,然后将RenderObject树渲染成页面(当然中间可能会有一些优化,比如RenderLayer树)。这些过程都存在与渲染引擎之中,渲染引擎在浏览器中是于JavaScript引擎(JavaScriptCore也好V8也好)分离开的,但为了方便JS操作DOM结构,渲染引擎会暴露一些接口供JavaScript调用。由于这两块相互分离,通信是需要付出代价的,因此JavaScript调用DOM提供的接口性能不咋地。各种性能优化的最佳实践也都在尽可能的减少DOM操作次数。
而虚拟DOM干了什么?它直接用JavaScript实现了DOM树(大致上)。组件的HTML结构并不会直接生成DOM,而是映射生成虚拟的JavaScript DOM结构,React又通过在这个虚拟DOM上实现了一个 diff 算法找出最小变更,再把这些变更写入实际的DOM中。这个虚拟DOM以JS结构的形式存在,计算性能会比较好,而且由于减少了实际DOM操作次数,性能会有较大提升
道理我都懂,可是为什么我们没有模块加载器?
所以就需要Webpack了
说说Webpack
什么是Webpack?
事实上它是一个打包工具,而不是像RequireJS或SeaJS这样的模块加载器,通过使用Webpack,能够像Node.js一样处理依赖关系,然后解析出模块之间的依赖,将代码打包(1): Learning one
(2):Learning two
相关文章推荐
- React 组件之间 事件调用(子组件调用父亲组件)
- React 组件之间 事件调用(父组件调用子组件)
- reactnative资源
- 细说ReactiveCocoa的冷信号与热信号(一)
- React Native for Android 研究总结
- React 的 diff 算法
- React.js学习笔记(一):组件协同与mixin
- 单元测试React
- 用React和PlanOut来做产品的AB测试
- react-native如何搭建开发环境搭建上手教程(转)
- 从react来理解learn once write anywhere
- React单元测试——十八般兵器齐上阵,环境构建篇
- react-native使用flux
- 运行ReactNative示例
- ReactNative项目配置要点
- 已有Android工程集成ReactNative页面
- ReactiveCocoa的常见用法和常用宏
- ReactiveCocoa实战: 模仿 "花瓣",重写 LeanCloud Rest Api的iOS REST Client.
- ReactiveCocoa实战: 模仿 "花瓣",重写 LeanCloud Rest Api的iOS REST Client.
- react-native —— 在Mac上搭建React Native Android开发环境