美文网首页Web前端之路让前端飞
React入门系列(二)JSX语法

React入门系列(二)JSX语法

作者: 娜姐聊前端 | 来源:发表于2017-04-24 17:08 被阅读80次

JSX是一种类XML格式的语法,它可以使用JavaScript语法,也可以使用HTML语法来创建虚拟元素(虚拟DOM树)。

1. 基本语法

JSX采用标签来实现任意嵌套,这点和XML/HTML类似。比如,构造一个列表:

var MyList = (
  <ul>
    <li>item1</li>
    <li>item2</li>
  </ul>);
// 后续可通过标签<MyList />使用该组件

要注意下面几点:

  1. 定义标签时,最外层只能有一个标签,即root标签只允许定义一个。下面的写法是错误的:
 var MyList =(
  <h1>this is a list</h1>
  <ul>
    <li>item1</li>
    <li>item2</li>
  </ul>);
  1. 标签必须闭合,严格遵守XML语法。下面的写法是错误的:
var MyList = (
<ul>
  <li>item1</li>
  <li>item2</li>);
  1. 根据标签第一个字母大小写情况,可以分为两种元素:DOM元素和组件元素
  • 首字母为小写时,是DOM元素,即原生的HTML标签。
  • 首字母为大写时,是组件元素。

2. 元素属性

上一个小结提到了有两种元素,DOM元素和组件元素

先讲述下两种元素在处理属性时的不同之处。

属性 DOM元素 组件元素
自定义 需要加data-前缀。如:<h1 data-attr="xxx"></h1> 可以随意定义属性名称
class和for 因为这两个名字为JavaScript关键字,因此需要转换为classNamehtmlFor之后再使用 可以直接使用该属性名

然后分析一下两种元素处理属性时相同之处。

(1) JavaScript表达式
可以使用JavaScript属性表达式。用{}代替""即可,格式为{javaScript code}

<MyList name={isLogin ? name: "user"} />

(2) 展开属性
使用“展开属性”来定义全部属性。如果元素属性特别多,建议采用这种格式。

const data = {name: 'button', value='1' text='it is a button'};
let component = <Component name={data.name} value={data.value} text={data.text} />
更简练的写法为:
let component = <Component {...data} />

(3) dangerouslySetInnerHTML属性
React会将所有显示在DOM中的字符串转义,防止XSS攻击。如果组件子元素为HTML,那么,可以通过dangerouslySetInnerHTML属性设置。

var MyList = (
<ul>
  <li data-attr="{a}" dangerouslySetInnerHTML={{__html: '<h1>item1</h1>'}}></li>
</ul>)

(4) ref属性
通过ref属性可以得到DOM/组件实例。

  • 将ref赋值给变量:
    • 如果在原生HTML标签上使用ref属性,返回DOM对象;
    • 如果是在自定义组件标签上使用ref属性,则返回该组件对象;
  • 将ref赋值给函数,当组件完成装载时会调用这个函数,参数是这个元素的DOM对象。

参考下述例子:

class Comp extends React.Component {
    componentDidMount() {
        // 通过this.refs访问ref属性值
        console.log("this.refs.subComp:" + this.refs.subComp);
    }

    render() {
        return (<SubComp ref="subComp"/>)
    }
}
class SubComp extends React.Component {
    componentDidMount() {
        console.log("this.refs.h1Comp:" + this.refs.h1Comp);
    }

    render() {
        return (<h1 ref="h1Comp">Hello world!</h1>)
    }
}

ReactDOM.render(
    <Comp/>,
    document.getElementById('container')
);

控制台打印值为:

this.refs.h1Comp:[object HTMLHeadingElement]
this.refs.subComp:[object Object]

小结

了解了JSX语法之后,我们就可以开始尝试创建React组件了。

下一节:React入门系列(三)创建组件

微信公众号:

相关文章

  • React入门系列(二)JSX语法

    JSX是一种类XML格式的语法,它可以使用JavaScript语法,也可以使用HTML语法来创建虚拟元素(虚拟DO...

  • 005@关于JSX语法.md

    005@关于JSX语法 转(有所更改):React入门:关于JSX语法可以参考的资料:React.js学习笔记之J...

  • React入门

    React 入门实例教程 1、Browser.js 的作用是将 JSX 语法转为 JavaScript 语法,这一...

  • react语法结构

    1.react JSX语法原理 react是函数式编程,使用jsx语法来渲染组件。jsx语法是合法的JavaScr...

  • React入门:关于JSX语法二

    而创建子元素可以直接交给JSX转化器 Javascript表达式 在JSX语法中写Javascript表达式只需要...

  • vue 渲染函数&jsx

    jsx react模板渲染语法

  • React 笔记

    JSX React 采用jsx语法,需用bable.js转义. JSX 语法可以和html 混写. html以< ...

  • ReactJS基础学习-01

    React JSX语法 React 使用 JSX 来替代常规的 JavaScript。 JSX 是一个看起来很像 ...

  • (React)认识React语法

    一、JSX语法 在React中,没有使用HTML标签来绘制UI,而是使用了JSX语法。 当然JSX语法中,也可以嵌...

  • React官网随记

    JSX jsx,一种js的语法扩展,React.createElement方法的语法糖。 在jsx中可嵌入任何表达...

网友评论

    本文标题:React入门系列(二)JSX语法

    本文链接:https://www.haomeiwen.com/subject/mlrezttx.html