在 React 设计时除了提供 props 预设值设定(Default Prop Values)外,也提供了 Prop 的验证(Validation)机制,让整个 Component 设计更加稳健:html
setState()
修改)和 props(由父元素传入),Component 会出现对应的显示结果。而人有生老病死,组件也有生命周期。透过操做生命周期处理函数,能够在对应的时间点进行 Component 须要的处理,关于更详细的组件生命周期介绍咱们会再下一个章节进行更一步说明。
在 React Component 中 CSS 使用 Inline Style 写法,全都封装在 JavaScript 当中:前端
Declarative
(注重 what to),而非命令式
Imperative
(注重 how to)的程式撰写方式:
以 Facebook 上面按赞功能来讲,如果命令式 Imperative
写法大约会是长这样:react
if(userLikes()) { if(!hasBlueLike()) { removeGrayLike(); addBlueLike(); } } else { if(hasBlueLike()) { removeBlueLike(); addGrayLike(); } }
如果声明式 Declarative
则是会长这样:git
map 方法能够方便的迭代数组,map 方法会迭代数组中的每个元素,并根据回调函数来处理每个元素,最后返回一个新数组。注意,这个方法不会改变原始数组。github
在咱们的例子中,回调函数只有一个参数,即数组中元素的值 (val 参数) ,但其实,你的回调函数也能够支持多个参数,譬如:元素的索引index、原始数组arr。数组
使用 map 方法来为 oldArray 中的每一项增长3,而且在 newArray 中保存它们。 oldArray 不该该被改变。浏览器
代码:安全
var oldArray = [1,2,3,4,5]; var newArray = oldArray.map(function(val){return val+3;});
JSX 最终会转换成浏览器能够读取的 JavaScript,如下为其规则:app
React.createElement( string/ReactClass, // 表示 HTML 元素或是 React Component [object props], // 属性值,用物件表示 [children] // 接下来参数皆为元素子元素 )
解析前(特别注意在 JSX 中使用 JavaScript 表达式时使用 {}
括起,以下方范例的 text
,里面对应的是变数。若需但愿放置通常文字,请加上 ''
):框架
var text = 'Hello React'; <h1>{text}</h1><h1>{'text'}</h1>
解析完后:
var text = 'Hello React'; React.createElement("h1", null, "Hello React!");
render
方法中只能回传一个根节点(Root Nodes)。例如:如有多个
<div>
要
render
请在外面包一个 Component 或
<div>
、
<span>
元素
class
和
for
因为为 JavaScript 保留关键字用法,所以在 JSX 中使用
className
和
htmlFor
替代。
在 JSX 中预设只有属性名称但没设值为 true
,例如如下第一个 input 标签 disabled
虽然没设值,但结果和下面的 input 为相同:
<input type="button" disabled />; <input type="button" disabled={true} />;
反之,如果没有属性,则预设预设为 false
:
在 ES6 中使用 ...
是迭代物件的意思,能够把全部物件对应的值迭代出来设定属性,但要注意后面设定的属性会盖掉前面相同属性:
如果但愿使用自定义属性,可使用 data-
:
在 JSX 中使用外观样式方法以下,第一个 {}
是 JSX 语法,第二个为 JavaScript 物件。与通常属性值用 -
分隔不一样,为驼峰式命名写法:
事件处理为前端开发的重头戏,在 JSX 中透过 inline 事件的绑定来监听并处理事件(注意也是驼峰式写法),更多事件处理方法请参考官网