最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

和我一起实战react之JSX_html/css

来源:懂视网 责编:小采 时间:2020-11-27 16:40:01
文档

和我一起实战react之JSX_html/css

和我一起实战react之JSX_html/css_WEB-ITnose:JSX 我们知道React使用一颗DOM对象树来描述文档,如果它是普通的对象,会是怎样? var element = { tagName: 'div', props: { id: 'div', className: 'container' }, children: [ { tagName: 'div', props: { id
推荐度:
导读和我一起实战react之JSX_html/css_WEB-ITnose:JSX 我们知道React使用一颗DOM对象树来描述文档,如果它是普通的对象,会是怎样? var element = { tagName: 'div', props: { id: 'div', className: 'container' }, children: [ { tagName: 'div', props: { id

JSX

我们知道React使用一颗DOM对象树来描述文档,如果它是普通的对象,会是怎样?

var element = { tagName: 'div', props: { id: 'div', className: 'container' }, children: [ { tagName: 'div', props: { id: 'div1', className: 'header' }, children: [...{element}] }, { tagName: 'div', props: { id: 'div2', className: 'content' }, children: [...{element}] }, { tagName: 'div', props: { id: 'div3', className: 'footer' }, children: [...{element}] } ]}

对应的 HTML:

 

JSX给予的方式正好相反,通过书写这样类似 HTML结构,通过transformer工具将其转换成了对象,且让我们看一个不借助 JSX的写法实现上面的结构。

React.createElement( 'div', { className: 'container'}, React.createElement( 'div', { className: 'header'} ), React.createElement( 'div', { className: 'content'} ), React.createElement( 'div', { className: 'footer'} ));

开始使用JSX

在今后的编程实践中期望大家使用JSX来书写React组件

利用JSX我们现在可以像写 HTML一样来书写React组件,某些情况下在属性中你还需要注意 JavaScript的保留字,比如class属性要写成className,for需要写成htmlFor。 JSX对于大小写是敏感的,小写属于HTML标签,大写则是React组件。

使用 JSX书写一个简单的组件:

import React from 'react';import { render } from 'react-dom';function Hello (props){ const { className, children } = props; return ( { children } );}render((  Hello World ),document.getElementById('app'))

表达式

在 JSX中 {}用来表示一个 JavaScript表达式,你可以在这里进行求值逻辑或者赋值,赋值且可看上述的Hello例子,只需要 { children }。

且看我们已经实现的 Dialog根据不同的 type类型来呈现不同的子组件。

好的写法是将逻辑判断写在return之前(good):

import Alert from './Alert';import Confirm from './Confirm';class Dialog extends React.Component { render (){ const { type } = this.props; const Component = type === 'alert' ? Alert : Confirm; return ( 
); }}

当然你也可以直接将表达式写在return里面(这个写法非常不好 bad):

import Alert from './Alert';import Confirm from './Confirm';class Dialog extends React.Component { render (){ const { type } = this.props; return ( 
{ type === 'alert' ? : }
); }}

注释

在 JSX里的注视和 JavaScript一样,比如 //, /**/,唯一的要求是需要使用 {}包括起来。

{/**/}

spread attributes

在Dialog的例子中可以看见大量的 ...符号,这是属于ES2015规范中的操作符,在React组件中的 {...this.props},可以将 props的属性设置为 React Component的属性。

HTML转义和自定义属性

为了防止XSS攻击,React组件会将需要显示到DOM的字符串进行转义,如果实在有这样的需求,可以有如下的几种方式解决:

  • 使用UTF-8的字符集
  • 使用对应字符的Unicode编码
  • 使用数组组装
  • 使用原始HTML
  • {['First ', ·, ' Second']}

    如果你在JSX中使用了不存在于HTML规范的属性,这个属性是会被忽略的,你需要使用 data-方式来自定义属性。

    关于支持的标签,属性,以及可访问性属性前缀的列表:

  • React支持的标签,属性
  • 可访问性属性前缀列表
  • 文档

    和我一起实战react之JSX_html/css

    和我一起实战react之JSX_html/css_WEB-ITnose:JSX 我们知道React使用一颗DOM对象树来描述文档,如果它是普通的对象,会是怎样? var element = { tagName: 'div', props: { id: 'div', className: 'container' }, children: [ { tagName: 'div', props: { id
    推荐度:
    标签: html css React
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top