一、ReactDOM

1.1 render()

ReactDOM.render(element,container,[callback])

在container中渲染一个React元素,然后返回组件一个引用(对于stateless组件,返回null)。如果React元素已经加入到了container中,再次执行上面的方法会执行更新操作,只在必要时更新DOM来反映最新的React元素。如果提供可选的回调函数,则该callback会在组件渲染或者更新完后执行。

注意:

ReactDOM.render控制container节点的内容。container中任何现存的DOM元素会被覆盖。后续调用会执行React的DOM diff算法。

ReactDOM.render不会更改container节点,只是修改了他的子节点。插入一个组件到现存的DOM节点并且不更改其子节点也是有可能的。

ReactDOM.render目前的版本会返回一个根ReactComponent实例的引用。然而,应该避免使用这个返回值,因为未来的版本可能会异步渲染组件。如果你需要使用根ReactComponent实例引用,建议使用callback ref。

1.2 ummountComponentAtNode()

ReactDOM.unmountComponentAtNode(container)

从DOM中移除一个装载好的React组件,并且清理它的事件处理和state。如果container中没有装载组件,这个函数将什么都不做。如果组件成功移除就返回true,如果没有组件被移除就返回false.

1.3 findDOMNode()

ReactDOM.findDOMNode(component)

如果这个组件装载进了DOM,就返回相应的本地浏览器DOM元素。这个函数可以读取DOM值,比如form field 值,执行DOM方法。在大多数情况下,你可以给DOM节点添加ref属性,尽量避免使用findDOMNode。当render返回null或者false时,findDOMNode也返回null。

注意:

findDOMNode只能用在已经装载的组件上,如果你在一个还没装载的组件上调用这个函数会抛出异常;该函数不能用于函数型组件。

二、DOM Elements

在React中,所有的DOM属性包括事件处理函数都应该用驼峰命名。例外是aria-*和data-*属性,他们是小写字母。

下面是React不同于DOM的属性:

2.1 checked

checked属性用于input中类型为checkbox和radio的组件。可以使用这个属性来设置组件是否被选中。在创建controlled组件时是很有用的。defaultChecked是uncontrolled的等价物,当组件首次装载时设置组件是否被选中。

2.2 className

使用className属性,可以指定一个CSS类。这个属性可以用于所有的常规DOM和SVG元素比如div, a和其他的。

如果你在Web Component中使用React,就要使用class属性,而不是className;

2.3 dangerouslySetInnerHTML

dangerouslySetInnerHTML是React提出的用于代替DOM中innerHTML的方法。通常设置在代码中设置HTML是危险的,因为很可能导致XSS攻击。

在React中可以直接设置HTML,但是你必须用dangerouslySetInnerHTML并且传递一个对象,对象的键为_ _html,来提醒你自己这是很危险的,下面是例子:

function createMarkup() {
return {__html: 'First · Second'};
} function MyComponent() {
return <div dangerouslySetInnerHTML={createMarkup()} />;
}

2.4 htmlFor

因为for是保留字,因此用htmlFor来代替for的使用。

2.5 onChange

当表单域发生改变时,触发事件。

2.6 selected

selected属性用于option组件。你可以使用它来设置组件是否被选择。在构件controlled组件时很有用。

2.7 style

style属性接受一个JS对象,JS对象中的键是驼峰命名而不是CSS字符串。这样更有效,而且可以防止XSS安全漏洞。比如

const divStyle = {
color: 'blue',
backgroundImage: 'url(' + imgUrl + ')',
}; function HelloWorldComponent() {
return <div style={divStyle}>Hello World!</div>;
}

style不是自动补全前缀的,为了支持旧的浏览器,你需要提供相应的样式属性:

const divStyle = {
WebkitTransition: 'all', // note the capital 'W' here
msTransition: 'all' // 'ms' is the only lowercase vendor prefix
}; function ComponentWithTransition() {
return <div style={divStyle}>This should work cross-browser</div>;
}

除了ms之外的厂商前缀都以大写字母开头,因此上面的WebkitTransition是大写的W。

2.8 value

input和textarea组件都支持value属性。你可以使用它来设置组件的value,可以用于构件一个controlled组件。defaultValue是uncontrolled等价物,在组件第一次装载时设置value值。

1. render()

-->

ReactDOM & DOM Elements的更多相关文章

  1. Adding DOM elements to document

    1.JavaScript 添加DOM Element 执行效率比较: 抄自:http://wildbit.com/blog/2006/11/21/javascript-optimization-add ...

  2. [Cypress] Create Aliases for DOM Elements in Cypress Tests

    We’ll often need to access the same DOM elements multiple times in one test. Your first instinct mig ...

  3. [D3] Create DOM Elements with D3 v4

    Change is good, but creating from scratch is even better. This lesson shows you how to create DOM el ...

  4. [D3] Modify DOM Elements with D3 v4

    Once you can get hold of DOM elements you’re ready to start changing them. Whether it’s changing col ...

  5. [D3] Select DOM Elements with D3 v4

    Before you can create dazzling data driven documents, you need to know how D3 accesses the DOM. This ...

  6. [TypeScript] Work with DOM Elements in TypeScript using Type Assertions

    The DOM can be a bit tricky when it comes to typing. You never really know exactly what you're going ...

  7. [Javascript] Create scrollable DOM elements with Greensock

    In this lesson, we will look at Greensock's Draggable API. We will implement a scrollable <div> ...

  8. [Vue] Conditionally Render DOM Elements in Vue.js (v-if v-else v-show)

    You can use v-if and v-else to display content based on assertions on your data. Similarly, v-show c ...

  9. [Svelte 3] Use Svelte 3 transitions to gracefully show and hide DOM elements

    Most websites are quite static and adding some animations/transitions can improve the user experienc ...

随机推荐

  1. day38 05-Spring的BeanFactory与ApplicationContext区别

    ApplicationContext怎么知道它是一个工厂呢? BeanFactory也可以做刚才那些事情,只不过ApplicationContext对它有扩展.ApplicationContext间接 ...

  2. NKOJ1469 通向自由的钥匙

    P1469通向自由的钥匙   时间限制 : 10000 MS   空间限制 : 65536 KB 问题描述 通向自由的钥匙被放n个房间里,这n个房间由n-1条走廊连接.但是每个房间里都有特别 的保护魔 ...

  3. 【CodeVS】1792 分解质因数

    1792 分解质因数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题目描述 Description 编写一个把整数N分解为质因数乘积的程序. 输入描述 Inp ...

  4. PHP 学习1.0

    1.简单一个class 类: 获取表单提交的值 采用post方式 <html><head><title>PHP TEST</title></hea ...

  5. ASP.NET CORE使用MailKit的一个故障点分析

    ASP.NET CORE下有需要发邮件的需求,但是原来framework下的 system.net.mail,没有实现smtpclient的功能(当时看是没有,说是准备并入.net core来着),所 ...

  6. php thrift TServerSocket实现端口复用

    <?php namespace Message\Controller; use Think\Controller; use Thrift\Exception\TException; use Th ...

  7. 关于Python缩进,我们该了解哪些?

    Python是一门独特的语言,它的代码块是通过缩进(Indentation)来标记的(大部分语言都是使用花括号作为代码块的标记),具有相同缩进的多行代码属于同一个代码块.如果代码莫名其妙的乱缩进,Py ...

  8. 阿里开源自用 OpenJDK 版本,Java 社区迎来中国力量

    阿里开源自用 OpenJDK 版本,Java 社区迎来中国力量 3 月 21 日,阿里巴巴将宣布开源 Alibaba Dragonwell.届时,开发者可通过阿里云开发者中心及 Github 社区下载 ...

  9. 自定义View系列教程01--常用工具介绍

    站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Android多分辨率适配框架(3)- 使用指南 自定 ...

  10. MySql实现Oracle的row_number()over(partition by ... order by ...)

    SELECT IF(t1.id = @id,@rownum := @rownum + 1,@rownum := 1)AS rownum, t1.*, @id := t1.id FROM (SELECT ...