React组件
React组件
组件是React中的基本单位,在每个组件里面又封装了程序逻辑,通过reader标出界面片段或者回传一段描述,组件再通过React.renderComponent将组件展示在浏览器中。每个组件的编写中会绑定一些事件,这些事件是动态绑定的,这个以后分析。
注释:在React编写注释的时候一定要注意,我们创建一个单独的js文件,在老版本加上/** @jsx React.DOM */这段前面加上其他注释会有报错异常,在新版本的react.js去掉了对这个注释的定义,可以不写一样执行。
看下代码:
/**
* Created by 13121528 on 2014/10/15.
*/
/**
* @jsx React.DOM
*/
var KlmNode = React.createClass({
render:function(){
return (<p>hello,sss</p>);
}
}); React.renderComponent(<KlmNode />,document.getElementById('container'));
从上面代码分析运行结果浏览器会报错“”
去掉/** @jsx React.DOM */前端的注释就运行正常了。在React官网也提到了注释问题,格式限定的非常严格。
在renderComponent函数的第一个参数是组件,这个命名可以任意:但你要针对这个命名创建一个的组件,如下代码:
/**
* @jsx React.DOM
*/ var hello = React.createClass({
render:function(){
return (<div className="ss">{this.props.title}</div>);
}
}); React.renderComponent(<hello title="Hello!" />,document.getElementById('container'));
运行结果是:
注:最新版本的React.js现在区分自定义模板名称了,上面小写的<hello> 首字母必须大写才能执行<Hello>,不然会失效。
通过React.createClass方式放回一个<div>的HTML Dom结构,其实<hello />标签就是return <div>,注意这里给创建组件添加样式需要通过"className"来定义,一般我们给HTML dom添加样式用class,而在React框架中则是className,或者直接对dom添加style,这个叫“内联样式”,在上面代码中可以给自定义组件添加属性,这个属性名称可以任意命名,跟平常自定义HTML dom属性一样,怎么获取值呢?在React中是用{this.props.*}的方式获取自定义属性的值。
刚才提到内联样式,在React中是这样呈现它的写法的,看下面代码:
/**
* @jsx React.DOM
*/
var navcss ={
margin:' 0 auto',
width:'95%',
height:'30px;',
lineHeight:'30px',
background:'cornflowerblue',
textAlign:'center'
}
var Nav = React.createClass({
render:function(){
return(
<div style={navcss}>
var NB = new Beer();
</div>
);
}
}); React.renderComponent(<Nav />,document.getElementById('navigation'));
我定义一个navcss变量里面封装了css样式,我只要在return dom中加上style={"自定义css样式变量"}就可以呈现在浏览器中了。注释:这里的css样式属性是驼峰式的命名,如(lineHeight,textAlign...);
在创建一个组件的时候return dom的时候,在里面可以再定义一组,如下段代码:
/**
* @jsx React.DOM
*/
var navcss ={
margin:' 0 auto',
width:'95%',
padding:'10px 0px 10px 0px;',
lineHeight:'50px',
background:'cornflowerblue',
textAlign:'center',
color:'#fff',
fontWeight:'bold',
fontSize:'50px',
textShadow:'0 0 1px #f6f6f6,0 0 5px #f6f6f6,0 0 15px #f6f6f6,0 0 20px #0090d9,0 0 25px #0090d9,0 0 30px #0090d9,0 0 50px #0090d9,0 0 80px #0090d9,0 0 100px #0090d9,0 0 150px #0090d9'
}
var navEmCss = {
display:'block',
width:'30px',
height:'30px',
float:'right',
border:'1px solid #000',
position:'relative'
} var Nav = React.createClass({
render:function(){
return(
<div style={navcss}>
var NB = new Bee();
<NavEm />
</div>
);
}
}); var NavEm = React.createClass({
render:function(){
return(
<em style={navEmCss} />
)
}
}); React.renderComponent(<Nav />,document.getElementById('navigation'));
运行结果如图:
右边有一个黑色的小框就是嵌套添加的组件内容。这里只是介绍React可以这样创建一个Dom树结构,个人在开发过程中不怎么会这样去做,我觉得这样会增加js代码量的开发。
注:在创建React组件的时候,如果里面DOM节点会自动给其添加一个属性data-reactid=".0.0",在这里提示一下!
React组件的更多相关文章
- React 组件性能优化探索实践
转自:http://www.tuicool.com/articles/Ar6Zruq React本身就非常关注性能,其提供的虚拟DOM搭配上Diff算法,实现对DOM操作最小粒度的改变也是非常的高效. ...
- webpack 打包一个简单react组件
安装Webpack,并加载一个简单的React组件 全局的npm模块安装: npm install -g webpack 安装jsx-loader npm install --save-dev jsx ...
- React 组件性能优化
React组件性能优化 前言 众所周知,浏览器的重绘和重排版(reflows & repaints)(DOM操作都会引起)才是导致网页性能问题的关键.而React虚拟DOM的目的就是为了减少浏 ...
- React组件属性部类(propTypes)校验
React组件属性类型(propTypes)校验 Prop 验证 随着应用不断变大,保证组件被正确使用变得非常有用.为此我们引入propTypes.React.PropTypes 提供很多验证器 (v ...
- 使用reflux进行react组件之间的通信
前言 组件之间为什么要通信?因为有依赖. 那么,作为React组件,怎么通信? React官网说, 进行 父-子 通信,可以直接pass props. 进行 子-父 通信,往父组件传给子组件的函数注入 ...
- 野心勃勃的React组件生命周期
当你还在写着Angular指令,过滤器,注入,服务,提供者,视图模版的时候,是不是觉得很烦,好在这个时候,React已经神一样的出现在历史舞台. React组件 React实现了UI=Fn(St ...
- React组件性能优化
转自:https://segmentfault.com/a/1190000006100489 React: 一个用于构建用户界面的JAVASCRIPT库. React仅仅专注于UI层:它使用虚拟DOM ...
- React组件生命周期过程说明
来自kiinlam github94 实例化 首次实例化 getDefaultProps getInitialState componentWillMount render componentDidM ...
- React组件系统、props与状态(state)
多个组件合成一个组件: var style = { fontSize: 20, color: '#ff0000' }; var WebSite = React.createClass({ rende ...
随机推荐
- September 9th 2016 Week 37th Friday
Within you, I lose myself. 有了你,我迷失了自我. I never had such feeling, maybe just because I never invested ...
- NYOJ_37.回文字符串 (附滚动数组)
时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当然,我们给你的问 ...
- 20145206《Java程序设计》实验二Java面向对象程序设计实验报告
20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- Lattice 的 Framebuffer IP核使用调试笔记之IP核生成与参数设置
本文由远航路上ing 原创,转载请标明出处. 这节笔记记录IP核的生成以及参数设置. 先再IP库里下载安装Framebuffer 的ipcore 并安装完毕. 一.IP核的生成: 1.先点击IP核则右 ...
- 360极速浏览器安装.crx扩展(postman)
用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具.今天给大家介绍的这款网页调试工具不仅可以 ...
- jcaptcha组件小小改造解决Invalid ID, could not validate une
https://my.oschina.net/chainlong/blog/192014
- Delphi面向对象的方法
方法是属于一个给定对象的过程和函数,方法反映的是对象的行为而不是数据,前一篇提到的对象的两个重要的方法:构造方法和析构方法. 为了使对象能执行各种功能,你能在对象中定制方法 创建一个方法用两个步骤,首 ...
- saltapi中expr_form参数的使用
以前,一直用compound参数, 现在,想要并行执行salt命令,那list就派上用场了. 同时传多个主机列表,用逗号分隔,然后,用list参数传,就好. [root@c1773 deployop] ...
- HDU1294 Rooted Trees Problem(整数划分 组合数学 DP)
讲解见http://www.cnblogs.com/IMGavin/p/5621370.html, 4 可重组合 dfs枚举子树的节点个数,相乘再累加 1 #include<iostream& ...
- <转>WCF中出现死锁或者超时
WCF回调中的死锁 一.服务器端死锁 对于如下服务: [ServiceContract(CallbackContract = typeof(INotify))] public class Downlo ...