React系列之JSX

106 阅读1分钟
原文链接: alili.tech

JSX是一个有趣的东西。它看似像一个模板语言,但是又具备javascript的所有能力。

在React中,JSX用来生成React元素。

我们使用create-react-app创建一个APP后:

一段JSX代码


                                    
import React, { Component } from 'react';

import ReactDOM from 'react-dom';

class App extends Component {
  render() {
    return (
      <div className="App">
      我是一个APP
      </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById('root'));


                                

我们可以在JSX中内嵌表达式


                                    
//插入数据  
const data = {name:"小明"}
const ele =  <div>我的名字是:{data.name} </div>;

//计算
const ele1 =  <div> {1+1} </div>;

//三元表达式
const ele2 =  <div> {true?"我是小明":"我不是小明"} </div>;

//在属性里
const ele3 =  <img src={date.xxx} />;


                                

因为JSX使用Babel编译后,本身自己就是一个对象.


                                    
let ele = <div className="user">Hello World!</div>


                                

编译后:


                                    
const element = React.createElement(
    'div',
    {className: 'user'},
    'Hello World!'
);


                                

所以,这就是JSX可以与js代码混写的原因.


                                    
var a =1;
function switchView(){
    if(a>1){
        return <div className="user">Hello World!</div>
    }else{
        return <div className="user">Hello Ming!</div>
    }
}


                                

编译后:


                                    
var a =1;
function switchView(){
    if(a>1){
        return React.createElement('div',{className: 'user'},'Hello world!');
    }else{
        return React.createElement('div',{className: 'user'},'Hello Ming!');
    }
}


                                

防止XXS攻击


                                    
let content ="<span>我是HTML代码?</span>"

let ele = <div>{content}</div> 
//会直接输入<span>我是HTML代码?</span>,不会把这一段变成HTML


                                

元素的class

因为在ES6里,class是关键字(不再是保留字).所以写的时候要注意,修改为className.

另外属性名都建议使用驼峰命名法.


                                    
//HTML
<div class="user">Hello World!</div>

//JSX
<div className="user">Hello World!</div>