上文中说到了组件了。
我们使用组件的目的最大莫过于复用,提供生产效率。
那么,这时候组件就应该能够提供一些”api”出来,让开发者去定义在不同场景下的不同表现,比如,行为或外观等。
而这些“api”就是 属性
 
在React中,用 props 访问实例元素的属性
 
属性:props
比如在JSX片段中,组件的实例元素有一个属性onoff:
 React.render(
  <ezlampcomp onoff="off"></ezlampcomp> ,
  document.querySelector("#content"));
 
在组件的实现中,我们可以通过props字段访问这个属性。
 
在JSX中,我们可以将JS表达式赋给React元素的属性,这个需要使用一对大括号
 var myOnoff = "on";
React.render(
<ezlampcomp onoff={myOnoff}></ezlampcomp>,
document.querySelector("#content"));
当然,为了更好理解,我们把JSX转换成JS看看:
 var myOnoff = "on";
React.render(
React.createElement(
EzLampComp,
{
onoff : myOnoff
}
),
document.querySelector("#content")
);
 
我们先来练下手,用表达式的方式去实现一个闪动的效果,其中类名 ez-lamp表示一个灯。
直接上代码了。
 
下面是CSS:
 <style>
.ez-lamp{
  display : inline-block;
  margin : 5px;
  width : 30px;
  height : 30px;
  border-radius : 50%;
}
.ez-lamp.on{
  opacity :;
  background : -webkit-radial-gradient(30% 30%,white 5%,red 95%);
}
.ez-lamp.off{
  opacity : 0.5;
background : -webkit-radial-gradient(30% 30%,#888 5%,red 95%);
}
</style>
 
 
下面是实现部分:
 <script type = "text/jsx">
//定义React组件
var EzLampComp = React.createClass({
  render : function(){   //取得属性值
  var onoff = this.props.onoff; //返回React元素
  if(onoff == "on")
  return <span className = "ez-lamp on"></span>;
  else
  return <span className = "ez-lamp off"></span>;
  }
}); var myOnoff = "on"; setInterval(function() { //渲染React元素
React.render(
  <EzLampComp onoff={myOnoff}/> ,
  document.querySelector("#content"));   myOnoff = myOnoff == "on" ? "off" : "on"; }, 1000); </script>
 
注意:上一篇里面说了,JSX里面虽然写起来跟HTML差不多,但是CSS类名还是要用className
     如onclick等也要写成onClick,驼峰式的写法。
 
 
 
内联样式
有时候我们不得已,必须要用内联样式。
在React中内联样式必须是一个JSON对象,字段对应样式属性名称,比如要渲染出
 //HTML
<div style=“borderRadius:50%;height:200px;width:200px"></div>
 
我们需要这样写React
 var myStyle = {
borderRadius:”50%",
width:"200px",
height:"200px"
};
//JSX
var e = <div style="{myStyle}"></div>;
//JavaScript
var e = React.createElement(
"div",{
style : myStyle
}
);
//render
React.render(e,...);
注意:
  1. 对应的属性名称需要用驼峰式,如border-radius要用borderRadius,background-image要用backgroundImage
  2. hack的前缀(-webkit, -moz, -o, -ms),除了ms,其他首字母都要大写,如-webkit-transition就是WebkitTransition, -ms-transition就是msTransition
 
 
比如我们要实现这样的效果
 
用内联样式实现的方法如下:
 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ex15:EzLampComp</title>
<script src="lib/react.js"></script>
<script src="lib/JSXTransformer.js"></script>
<style>
.ez-lamp{
display : inline-block;
margin : 5px;
width : 30px;
height : 30px;
}
</style>
</head>
<body>
<div id="content"></div>
<script type = "text/jsx">
//定义React组件
var EzLampComp = React.createClass({
  render : function(){
    //取得属性值
    var color = this.props.color,
    onoff = this.props.onoff;
    //亮光颜色
    var lights = {
      "off":"#888",
      "on":"#fff"
    };
    //透明度
    var opacity ={
      "off":0.5,
      "on":1.0
    };
    //根据属性设置附加的样式
    var style = {
      borderRadius : "50%", //对应样式:border-radius
      opacity : opacity[this.props.onoff],
      background : "-webkit-radial-gradient(30% 30%," + lights[onoff] + " 5%," + color +" 95%)"
    };
    //返回React元素
    return <span className="ez-lamp" style={style}></span>; //JSX
  }
});
//渲染React元素
React.render(
<div>
  <EzLampComp color="green" onoff="off"/>
  <EzLampComp color="green" onoff="on"/>
  <EzLampComp color="red" onoff="off"/>
  <EzLampComp color="red" onoff="on"/>
  <EzLampComp color="blue" onoff="off"/>
  <EzLampComp color="blue" onoff="on"/>
</div>
,document.querySelector("#content"));
</script>
</body>
</html>
 先喝口水休息一下先.... 
 
 
 
 
 

React.js再探(二)的更多相关文章

  1. React.js再探(四)

    不知道看官们还记不记得上一节的内容,关于生命周期的.我们来个例子重温且练习一下. 传送门:http://www.cnblogs.com/galenyip/p/4574400.html 我们来实现一下时 ...

  2. React.js再探(三)

    很多时候,组件实例的外观和行为我们通过props进行定制就可以了.因为任何时候,组件实例的表现只跟 传过来的props属性 相关. 我们称这种为 无状态/ stateless 组件 即它自身是 无记忆 ...

  3. React.js终探(七)(完)

    我们在前面介绍了组件的各种特性,这一节我们来说说多组件的情况. 在实际开发中,我们的组件难免会遇到有公共部分的情况,如果是个别情况还好,但如果数量比较多的话,那这时候,就需要公用了. 怎么公用呢? R ...

  4. React.js终探(六)

    在React中,我们怎么样使用它跟CSS 3 动画结合在一起使用呢? CSS3 Transitoin CSS3动画要求DOM属性变化的时候才能够被触发.所以这就需要我们把属性变化后的React元素渲染 ...

  5. .Net平台-MVP模式再探(二)

    PS:     本文与  上一遍文章  没有什么必然的联系,可以说是对于MVP的一定的加深,或许在理解上比上一篇多有点难度. 正文   一.简单讲讲MVP是什么玩意儿 如果从层次关系来讲,MVP属于P ...

  6. react.js 从零开始(二)组件的生命周期

    什么是生命周期? 组件本质上是一个状态机,输入确定,输出一定确定. 当状态改变的时候 会触发不同的钩子函数,可以让开发者做出响应.. 一个组件的生命周期可以概括为 初始化:状态下 可以自定义的函数 g ...

  7. React.js终探(五)

    在React中,一切都是看做组件. 而组件的嵌套也是十分常见的. 所以有的组件就作为容器组件 容器组件 React元素可以包含子元素 如 //JSX <ezpanel title="t ...

  8. 再谈React.js实现原生js拖拽效果

    前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目 ...

  9. 从源码的角度再看 React JS 中的 setState

    在这一篇文章中,我们从源码的角度再次理解下 setState 的更新机制,供深入研究学习之用. 在上一篇手记「深入理解 React JS 中的 setState」中,我们简单地理解了 React 中 ...

随机推荐

  1. 【C语言探索之旅】 第二课:工欲善其事,必先利其器

    内容简介 1.课程大纲 2.第一部分第二课:工欲善其事,必先利其器 3.第一部分第三课预告:你的第一个程序 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C ...

  2. C# HttpClient Cookie验证解决方法

    自实现的cookie 验证,远程取值的例子 以下代码配合HttpClient使用可以实现跨域(cookie的读写) //验证 复制代码 代码如下: HttpClient httpClient = ne ...

  3. pyspark简要原则

    概要 这是一个看前一段时间spark的python支持的时,有点简单的后pyspark内python代码,我们把一个一般流程.虽然几乎没有python,但基本上能看懂pyspark它是如何使不同的虚拟 ...

  4. Android ImageView分析并展开

    版本号:1.0  日期:2014.6.11 2014.6.12 版权:© 2014 kince 转载注明出处   ImageView是开发中经常使用到的一个控件,也能够说是不可缺少的. 对于它的使用. ...

  5. UVA 12538 Version Controlled IDE 解题报告

    题意:给三种操作 1.在p位置插入一个字符串. 2.从p位置开始删除长度为c的字符串 3.输出第v个历史版本中从p位置开始的长度为c的字符串 解法:可以用平衡树做,但是不会.后来又听说可一用一个叫ro ...

  6. SQL开发中容易忽视的一些小地方(四)

    原文:SQL开发中容易忽视的一些小地方(四) 本篇我想针对网上一些对于非聚集索引使用场合的某些说法进行一些更正. 下面引用下MSDN对于非聚集索引结构的描述. 非聚集索引结构: 1:非聚集索引与聚集索 ...

  7. Nginx模块开发入门(转)

    前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%.与Apache相比,Nginx在高并 ...

  8. AndroidManifest:VersionCode和VersionName

    Google为APK定义了两个关于版本号属性:VersionCode和VersionName,他们有不同的用途. VersionCode:对消费者不可见.仅用于应用市场.程序内部识别版本号,推断新旧等 ...

  9. ASP.NET MVC(C#)和Quartz.Net组件

    ASP.NET MVC(C#)和Quartz.Net组件 在之前的文章<推荐一个简单.轻量.功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler>和&l ...

  10. Web Host消息处理管道

    Web Host消息处理管道 前言 我们知道Web API本身是无法提供请求-响应的机制,它是通过Web Host以及Self Host的寄宿的宿主方式来提供一个请求-响应的运行环境.二者都是将请求和 ...