1、JavaScript XML

JSX = JavaScript XML,是一个看起来很像 XML 的 JavaScript 语法扩展。
JSX 不是模板,是JS语法本身,有更多的扩展。
JSX 组件一般以大写字母开头。
JSX 属性名称采用驼峰式。
JSX 属性值接受一个函数,而不是字符串。
JSX return false; 不会阻止组件的默认行为,需要调用 e.preventDefault();

 2、React.Component 组件,ES6写法

class MyComponent extends React.Component{
render(){
return <div>Customer Component:{this.props.name}</div>
}
} React.render(<MyComponent name="Hello World"/>, document.getElementById("root"))

3、 React.createElement ,创建元素

语法:React.createElement(type,[props],[...children])

创建一个react元素;第一个参数为模板标签名称,第二个参数为模板的props,第三个参数为模板文本内容

1),document.createElement,JavaScript原生方法

const h1 = document.createElement('h1');
h1.className='title';
h1.innerText='Hello World';
document.getElementById('example').appendChild(h1);

2、React.createElement,使用对象属性

const h1 = React.createElement("h1", {className: "title"}, "Hello World");
ReactDOM.render(h1, document.getElementById('example'));

3、使用React表达式,()

ReactDOM.render((<h1 className="title">Hello World</h1>), document.getElementById("example"));

    

4、React.createClass 创建模板,备注:废除  

5、ReactDOM.render 元素渲染

ReactDOM.render 用于将模板转为HTML语言,并插入指定的DOM节点。

语法:ReactDOM.render(element, container, [callback])

该方法接收两个参数:第一个是创建的模板,第二个是目标元素

const element = <h1>Hello World</h1>;
ReactDOM.render(
element,
document.getElementById('root')
);

  

6、标签都需要有闭合

<img  />
<p>Hello world<p>

7、class命名,需要className

<input className='header' maxLength="255" />

8、在jsx里写多个标签可以用括号包起来(必须要有一个根元素)

var Header = (<div>
<p>hello</p>
<p>world</p>
</div>)

9、Javascript表达式,使用{}标识内部是JS表达式

JSX是HTML和JavaScript混写的语法,当遇到<,JSX就当HTML解析,遇到{就当Javascript解析

var a = 'hello world';
let b = <div>{a}</div>

10、style 属性

style属性是用两个 { 包含的,最外层的 { 表示内部是一个JS表达式,里面的 { 表示是一个JS对象字面量

 <div style = {{'background':'red'}}>hello world</div>

11、事件绑定属性的命名采用驼峰式写法,而不是小写

<button onClick={handle}> hello world</button>

12、href={},及href内部需要使用单引号

<a href={'show.html?id=' + this.state.id}>hello world</a>

13、props 与 state 的区别

props 是组件对外的接口,state 是组件对内的接口
state是可变的,是一组用于反映组件UI变化的状态集合;
props对于使用它的组件来说,是只读的,要想修改props,只能通过该组件的父组件修改; props的使用
<Hello data={id:0} />

state的使用

this.setState({id: 0});
this.setState((prevState, props) => ({ id: props.id }));

14、注释 (Comments)

1)单行注释,用 {}

{/* 单行注释 */}

2)多行注释,用 /**/

/*




*/

3)行尾注释,用 //

var name = "Hello World";    //行尾注释

15、HTML转义

React 默认会转义所有字符串,使用 __html 进行转义

var content='<strong>Hello World</strong>';
React.render(
<div>{{__html:content}}</div>,
document.body
);

显示 state html 内容 

{<div dangerouslySetInnerHTML={{ __html: this.state.data.content }} /> }

16、MAP循环
React通过循环遍历出生成的组件集合,在循环时一定要加上key值

{arr.map(function(it,i) {
return <span key={i}> {it} </span>
})}

17、Loop循环

var rows = [];
for (var i=0; i < numrows; i++) {
rows.push(<ObjectRow key={i}/>);
} render(){
return (<tbody>{rows}</tbody>);
}

18、IF-ELSE

在JSX中是不可以直接在{}中加入if-else的

  • 使用 三元操作符 来替代 if-else,或者将复杂的操作在JSX外面使用JS去处理
  • 使用闭包自执行函数
    class Hello extends React.Component {
    render (){
    return(
    <div>
    { this.props.loggedIn ?
    <span>
    <h2>{ this.props.name }</h2>
    <p>Hello World</p>
    </span>
    :
    <h2>Hello Message</h2>
    }
    </div>
    )
    }
    }

19、Switch-Case

return (
<section>
<h1>Color</h1>
<h3>Name</h3>
<p>{this.state.color || "white"}</p>
<h3>Hex</h3>
<p>
{(() => {
switch (this.state.color) {
case "red": return "#FF0000";
case "green": return "#00FF00";
case "blue": return "#0000FF";
default: return "#FFFFFF";
}
})()}
</p>
</section>
);

20、返回数组

const arr = ['Hello', 'World'];

const Arr = () => {
return arr.map((item, index) => {
return <p key={index}>{item}</p>
})
} ReactDOM.render(<Arr />, document.getElementById('root'));

21、表单

this.setState({
    [e.target.name]: e.target.value
})

表单示例:

<script type="text/jsx">
class MyForm extends React.Component {
constructor(props){
super(props);
this.state = {
sex:0,
age:1
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(e){
this.setState({
[e.target.name] : e.target.value
});
}
handleSubmit(e){
e.preventDefault();
var arr = [];
for (var item in this.state){
arr.push(item + '=' + this.state[item]);
}
result.innerText = arr.join();
}
render(){
return(
<form onSubmit={this.handleSubmit}>
<p>性别:<input type='text' name="sex" onChange={this.handleChange} value={this.state.sex} /></p>
<p>年龄:<input type='text' name="age" onChange={this.handleChange} value={this.state.age} /></p>
<p><input type='submit' value='submit' /></p>
<p>表单值:<span id="result"></span></p>
</form>
)
}
} ReactDOM.render(
<MyForm />,
document.body.appendChild(document.createElement('div'))
);
</script>

 22、表格

<tr>必须为<tbody>的子级

<table>
<tbody>
<tr>
<td>Hello World</td>
</tr>
</tbody>
</table>

23、多个组件

{/*定义函数*/}
const Hello = (props) => {
return (
<div>
<h1>{props.name}</h1>
</div>
)
}
{/*定义组件*/}
class Form1 extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<Hello name={this.props.name} />
);
}
}
{/*元素渲染*/}
ReactDOM.render(
<Form1 name="Hello World" />,
document.getElementById('form1')
);

一个简单的无状态组件,只受属性控制

const Button = props => (
<button onClick={props.onClick}>
{props.text}
</button>
);

调用上面Button组件
<Button onClick={this.handleClick} text="Hello World" />

容器组件 X 展示组件

const List = props =>
<ul>
{props.data.map(d => (
<li>{d.title}</li>
))}
</ul>

调用上面Button组件
<List data={this.state.data} />

  

React 语法的更多相关文章

  1. webStrom中React语法提示,React语法报错处理

    1,webStrom中React语法报错 ①, 取消Power Save Mode的勾选 File——Power Save Mode ②,webstorm开发react-native智能提示 随便在一 ...

  2. 转载 webstrom识别 React语法

    对于程序员而言:驼峰和下划线之间是一场宗派战争:大括号是否换行会成为一种党派:逗号写在行尾还是行首的人来自不同星球-- 然而,无规矩不成方圆,任何一个团队,要想有高质量的产出,第一步必须要对一些基本的 ...

  3. React 语法基础(一)之表达式和jsx

    react负责逻辑控制 reactdom负责渲染 本节知识点 有 1)变量的使用,简单使用. 1==>jsx中的注释 {/* */} 2===> 简单的渲染 app.js ps==> ...

  4. react语法注意事项

    组件: var HelloMessage = React.createClass({ render: function() { return <h1>Hello {this.props.n ...

  5. React 语法之let和const命令

    let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = 10; var b = 1; } a // ...

  6. webstrom编辑react语法报错解决

    问题: 解决办法:1.把 JavaScript 的版本设置为 JSX Harmony. 2.把<script>type类型改为:text/jsx

  7. react 语法细节总结说明

    1.当要获取某个数据列表中的某个字段时,用“.”附加的形式.例如:获取user中的balance字段,用this.props.user.balance 来表示. 2.当要打印某个数据或字段结果时,co ...

  8. React基础语法学习

    React主要有如下3个特点: 作为UI(Just the UI) 虚拟DOM(Virtual DOM):这是亮点 是React最重要的一个特性 放进内存 最小更新的视图,差异部分更新 diff算法 ...

  9. React基本语法

    React 一.导入     0.局部安装 react 和 react-dom         npm install --save-dev react react-dom       1.react ...

随机推荐

  1. plsql excel导入报错:未发现数据源名称并且未指定默认驱动程序

        1.情景展示 使用plsql的odbc导入器,导入excel数据时,报错信息如下: anydac 未发现数据源名称如何处理 2.原因分析 操作系统的问题,我的是64位的系统,plsql支持32 ...

  2. 如何优雅地执行dubbo"单测"

    很多小伙伴所在的公司是基于Dubbo来构建技术栈的,日常开发中必不可少要写dubbo单测(单元测试),如果单测数据依赖已有的外部dubbo服务,一般是mock数据,如果数据比较复杂,其实mock数据也 ...

  3. Gamma阶段第一次scrum meeting

    每日任务内容 队员 昨日完成任务 明日要完成的任务 张圆宁 #91 用户体验与优化:发现用户体验细节问题https://github.com/rRetr0Git/rateMyCourse/issues ...

  4. 冰多多团队-第五次Scrum会议

    冰多多团队-第五次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 zpj 部分Action整合, 接入语音接口,整合项目解决兼容性问题 ASR bug修复 牛雅哲 跑通了科大讯飞语法识别的 ...

  5. Django实现自动发布(3发布-安装)

    相对于服务的升级.回退,新部署一个服务要复杂一些,要满足以下要求: 已经运行了服务实例的主机不能重复部署 进程启动需要的配置文件要先同步到主机上 之前的升级.回退都是指进程的操作,不涉及配置文件的变更 ...

  6. groupby 的妙用(注意size和count)

    Pandas的groupby()功能很强大,用好了可以方便的解决很多问题,在数据处理以及日常工作中经常能施展拳脚. 今天,我们一起来领略下groupby()的魅力吧. 首先,引入相关package: ...

  7. Laravel 控制器 Controller

    一.控制器存在的意义 路由可以分发请求:路由中还可以引入 html 页面:我们可以在 route/web.php 中搞定一切了:但是如果把业务逻辑都写入到路由中:那路由将庞大的难以维护:于是控制器就有 ...

  8. angular7post提交的例子

    postDemo() { const params = new HttpParams(); '); '); this._httpClient.post('http://127.0.0.1:12345/ ...

  9. Nginx实践篇(5)- Nginx代理服务 - 代理缓冲区、代理重新定义请求头、代理连接超时(转)

    Nginx实践篇(5)- Nginx代理服务 - 代理缓冲区.代理重新定义请求头.代理连接超时 nginx参数默认值 http://nginx.org/en/docs/http/ngx_http_co ...

  10. WebGL学习笔记(九):阴影

    3D中实现实时阴影技术中比较常见的方式是阴影映射(Shadow Mapping),我们这里也以这种技术来实现实时阴影. 阴影映射背后的思路非常简单:我们先以光的位置为视角进行渲染,我们能看到的东西都将 ...