ReactDOM & DOM Elements
一、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的更多相关文章
- Adding DOM elements to document
1.JavaScript 添加DOM Element 执行效率比较: 抄自:http://wildbit.com/blog/2006/11/21/javascript-optimization-add ...
- [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 ...
- [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 ...
- [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 ...
- [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 ...
- [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 ...
- [Javascript] Create scrollable DOM elements with Greensock
In this lesson, we will look at Greensock's Draggable API. We will implement a scrollable <div> ...
- [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 ...
- [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 ...
随机推荐
- Python之路,Day3- Python基础(转载Alex)
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...
- redis的安装,以及主从实现同步
Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构.下面我演示下怎样在多台服务器上进行Redi ...
- MySQL ODBC驱动安装和配置数据源
一.MySQL的ODBC驱动下载及安装 步骤一:下载ODBC驱动安装包 1.下载地址: https://dev.mysql.com/downloads/connector/odbc/ 2.选择适合自己 ...
- SEO优化步骤
SEO技术并不是简单的几个建议,而是一项需要足够耐心和细致的脑力劳动.大体上,SEO优化主要分为8小步: 1.关键词分析(也叫关键词定位) 这是进行SEO优化最重要的一环,关键词分析包括:关键词关注量 ...
- day38 18-Spring的XML和注解的结合使用
什么情况下使用XML,什么情况下使用注解?又有XML,又有注解,开发的时候使用哪种? XML:结构清晰,配置麻烦. 注解:简单, 它俩的结合点在属性注入上. 两种方式结合:一般使用XML注册Bean, ...
- 2018-12-29-WPF-如何建立自己的-3d-gis-程序
title author date CreateTime categories WPF 如何建立自己的 3d gis 程序 lindexi 2018-12-29 14:11:11 +0800 2018 ...
- LeetCode --- Validate Binary Search Tree
题目链接 判断一颗二叉树是否是二叉搜索树(二叉排序树),也就是BST 如果该二叉树是BST, 那么对其中序遍历,所得序列一定是单调递增的(不考虑有重复数值的情况) 附上代码: /** * Defini ...
- LintCode_68 二叉树后序遍历
题目 给出一棵二叉树,返回其节点值的后序遍历. 思路 后序比较麻烦 需要另外一个变量来记录当前节点入栈的次数 设计pair<TreeNode*, int> p; p.first 为二叉树节 ...
- Directx11教程(52) 实例(instancing)的简单应用
原文:Directx11教程(52) 实例(instancing)的简单应用 有些时候,我们需要在场景中渲染大量的重复的物体,比如体育场中的观众,森林里面的树木等等,这些物体具有相似的形状,比如很多树 ...
- oralce触发器
n 触发器的分类 DML(insert,delete,update)触发器 DDL(create table ,create view...drop...)触发器 系统触发器(与系统相关的触发器,比 ...