1. JSX

  JSX是一种拥有描述UI的JavaScript扩展语法,React使用这种语法描述组件的UI。

1.1 基本语法

  JSX可以嵌套多个HTML标签,可以使用大部分符号HTML规范的属性。

  TodoList.js:

import React, { Component } from 'react'

class TodoList extends Component {
render(){
return (
<ul>
<li>To Do</li>
<li>In Progress</li>
<li>Done</li>
</ul>
);
}
} export default TodoList;

  index.js:

import React from 'react';
import ReactDOM from 'react-dom'; import TodoList from './components/TodoList' ReactDOM.render(<TodoList />, document.getElementById('root'));

  index.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>React App</title>
</head>
<body>
<div id="root"></div>
</body>
</html>

  JSX中的HTML标签属性绝大多数与HTML规范一致,但是class和for这两个属性在JSX中需要写为className何htmlFor。

  class和for是JavaScript中的保留字。

1.2 标签类型

  在JSX语法中,使用的标签类型有两种:DOM类型标签和React组件类型标签。

  使用DOM类型标签时,标签的首字母必须小写。

  使用React类型标签时,组件名称的首字母必须大写。

  React通过首字母的大小写判断渲染的是DOM类型标签,还是React组件类型标签。

// DOM类型标签
const element = <h1>Hello World</h1>;
// React组件类型标签
const element = <TodoList />;
// 嵌套使用
const element = {
<div>
<TodoList />
</div>
}

1.3 JavaScript表达式

  在JSX中使用JavaScript表达式需要将表达式用大括号 {} 包括起来。

  在JSX中使用表达式的两个场景:(1)通过表达式给标签属性赋值(2)通过表达式定义组件。

import React, { Component } from 'react'

class TodoList extends Component {
render() {
const todos = ['To Do', 'In Progress', 'Done']; return (
<ul>
{
todos.map((item, index) =>
<li key = { index }> { item } </li>
)
}
</ul>
);
}
} export default TodoList;

1.4 条件判断

  JavaScript表达式要求必须有返回值,因此无法直接使用if else语句,解决方法:

  ◊ 使用三元运算符

  ◊ 设置变量并在属性中引用

  ◊ 将逻辑转化到函数中

  ◊ 使用&&运算符

1.4.1 三元运算符

import React, { Component } from "react"

class HelloWorld extends Component {
constructor(props) {
super(props);
this.state = {
isComplete: true
}
} render() {
return (
<div className={ this.state.isComplete ? 'is-complete' : '' }> Hello { this.props.name }! </div>
);
}
} export default HelloWorld;

1.4.2 使用变量

import React, { Component } from "react"

class HelloWorld extends Component {
constructor(props) {
super(props);
this.state = {
isComplete: true
}
} getIsComplete() {
return this.state.isComplete ? 'is-complete' : '';
} render() {
let isComplete = this.getIsComplete();
return (
<div className={ isComplete }> Hello { this.props.name }! </div>
);
}
} export default HelloWorld;

1.4.3 使用函数

import React, { Component } from "react"

class HelloWorld extends Component {
constructor(props) {
super(props);
this.state = {
isComplete: true
}
} getIsComplete() {
return this.state.isComplete ? 'is-complete' : '';
} render() {
return (
<div className={ this.getIsComplete() }> Hello { this.props.name }! </div>
);
}
} export default HelloWorld;

1.4.4 使用逻辑与(&&)运算符

import React, { Component } from "react"

class HelloWorld extends Component {
constructor(props) {
super(props);
this.state = {
isComplete: true
}
} render() {
return (
<div className={ this.state.isComplete && 'is-complete' }> Hello { this.props.name }! </div>
);
}
} export default HelloWorld;

1.5 标签属性

  (1)当JSX标签属性是DOM类型的标签时,JSX支持对于DOM标签的属性。

  JSX中的内联样式通过style属性来定义,但属性值必须为对象,且对象中的属性名需要使用camelCase(驼峰命名法)。

  例:font-size改为fontSize。

import React, { Component } from 'react'

class TodoList extends Component {
render() {
const todos = ['To Do', 'In Progress', 'Done']; return (
<ul style={{color: 'red', fontSize: '14px'}}>
{
todos.map((item, index) =>
<li key = { index }> { item } </li>
)
}
</ul>
);
}
} export default TodoList;

  (2)当JSX标签是React组件类型时,可以任意自定义标签的属性名。

  HelloWorld.js

import React, { Component } from "react"

class HelloWorld extends Component {
render() {
return (
<div> Hello { this.props.name }! </div>
);
}
} export default HelloWorld;

  index.js:

import React from 'react';
import ReactDOM from 'react-dom'; import HelloWorld from './components/HelloWorld' ReactDOM.render(<HelloWorld name='World' />, document.getElementById('root'));

1.6 注释

  JSX中,在标签子节点内的注释写在{}中。

import React, { Component } from 'react'

class TodoList extends Component {
render() {
const todos = ['To Do', 'In Progress', 'Done']; return (
<ul style={{color: 'red', fontSize: '14px'}}>
{/* 注释 */}
{
todos.map((item, index) =>
<li key = { index }> { item } </li>
)
}
</ul>
);
}
} export default TodoList;

  JSX语法只是 React.createElement(component, props, ...children)的语法糖,所有的JSX语法最终都会被转换成该方法调用。

  在项目智勇首选使用JSX语法。

React笔记:React基础(2)的更多相关文章

  1. React学习笔记(一) 基础知识

    现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我. React的基 ...

  2. React Native 入门基础知识总结

    中秋在家闲得无事,想着做点啥,后来想想,为啥不学学 react native.在学习 React Native 时, 需要对前端(HTML,CSS,JavaScript)知识有所了解.对于JS,可以看 ...

  3. 【React】react学习笔记01-概念与基本使用

      俺为啥要学这玩意:   家里的杂事好不容易处理完了,开始正式静下心来学习~博主是做后端开发的,js基础不深,之前也是用React写过许多东西了,但是基本上都是用的CV大法,别人的组 件修修改改拿来 ...

  4. React笔记_(3)_react语法2

    React笔记_(3)_react语法2 state和refs props就是在render渲染时,向组件内传递的变量,这个传递是单向的,只能继承下来读取. 如何进行双向传递呢? state (状态机 ...

  5. React笔记:组件(3)

    1. 组件定义 组件是React的核心概念,组件将应用的UI拆分成独立的.可复用的模块. 定义组件的两种方式: (1)类组件:使用ES6 class (2)函数组件:使用函数 使用class定义组件的 ...

  6. 【温故知新】—— React/Redux/React-router4基础知识&独立团Demo

    前言:React专注View层,一切皆组件:全部使用ES6语法,最新版本为React16. Redux是专注于状态管理的库,和react解耦:单一状态,单向数据流.[独立团github地址] 一.Re ...

  7. react笔记汇总

    1.什么是React? a.React 是一个用于构建用户界面的 JAVASCRIPT 库. b.React主要用于构建UI,很多人认为 React 是 MVC 中的 V. c.React 起源于 F ...

  8. React笔记1

    目录 1.react基础:类组件.函数式组件.ES5/ES6继承 2.生命周期钩子函数 3.什么是JSX 4.props和state有什么区别 5.路由配置 6.自定义封住组件 7.React 状态管 ...

  9. React学习笔记-1-什么是react,react环境搭建以及第一个react实例

    什么是react?react的官方网站:https://facebook.github.io/react/下图这个就是就是react的标志,非常巧合的是他和我们的github的编辑器Atom非常相似. ...

随机推荐

  1. Springboot整合Elastic-Job

    Elastic-Job是当当网的任务调度开源框架,有以下功能 分布式调度协调 弹性扩容缩容 失效转移 错过执行作业重触发 作业分片一致性,保证同一分片在分布式环境中仅一个执行实例 自诊断并修复分布式不 ...

  2. Python获取网络中的存活主机以及哪些主机是Linux

    这个脚本用于扫描网络中的存活主机,通常在CMDB中自动获取主机的时候用到. #!/usr/bin/env python # -*- coding: utf-8 -*- ""&quo ...

  3. Golang: Cobra命令行参数库的使用

    将cobra下载到 $GOPATH,用命令: go get -v github.com/spf13/cobra/cobra 然后使用 go install github.com/spf13/cobra ...

  4. 玩玩小程序:使用 WebApi 交互打造原生的微信小程序 - 图灵小书架

    使用 WebApi 交互打造原生的微信小程序 - 图灵小书架 目录 介绍 源码地址 扫一扫体验 代码分析 其它相关信息(互联网搜集) 介绍 定时抓取图灵社区官网的首页.最热.推荐和最新等栏目的相关图书 ...

  5. h5页面 video暂停播放 视频控件 以及当前页面只有一个可以播放效果

    <!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...

  6. H5与C3权威指南笔记--box-shadow

    box-shadow 用于给盒子添加阴影效果.IE9+ 举个栗子:box-shadow: inset 5px 5px 5px red; inset可选,该值会让阴影出现在盒子内部. 第一个5px是阴影 ...

  7. SD 笔记01

    sap组织结构:代表一个企业的组织视图的结构.根据业务处理,可以设置自己工时的结构.形成一个支持所有业务活动的框架. 集团公司代码销售区域 :销售组织.销售渠道.产品组:工厂库存地点装运地点 集团:c ...

  8. javascript排序算法-快速排序

    快速排序 概念: (1) 首先,从数组中选择中间一项作为主元. (2) 创建两个指针,左边一个指向数组第一个项,右边一个指向数组最后一个项.移动左指针直到我们找到一个比主元大的元素,接着,移动右指针直 ...

  9. webpack 样式表抽离成专门的单独文件并且设置版本号

    先以下的 css 的处理我们都把 mode 设置为 production. webpack4 开始使用: mini-css-extract-plugin插件, 1-3 的版本可以用: extract- ...

  10. 微信小程序 canvas 文字自动换行

    Page({ drawCanvas: function(ctx) {// 地址 ctx.setFontSize() ctx.setFillStyle('#9E7240') ctx.textAlign= ...