react16是Facebook在2017年发布的react版本,几乎对react底层进行重写,但是对外API不变,因此可以无缝转移到react16
render返回类型
除了只能返回单个元素外,react16支持返回字符串和数组(由react元素组成)
例如:
render(){
return[
<div>hallo</div>,
<div>word</div>
]
}
或者
render(){
return "hallo word"
}
错误处理
react16引入了新的错误处理机制,当组件发生错误,将会将其从组件树中卸载,避免引起整个应用的崩溃
当然也提供了更友好的处理方式,叫错误边界,这个会捕获子组件的错误,并且输出错误日志和出错提示,例如:
componentDidCatch(error, info){
console.log(error,info)
}
Portals
React16的Portals特性可以将组件渲染到当前组件树以外的DOM树上,例如弹框
ReactDOM.createPortal(child, container)
第一个参数是可以被渲染的react节点,第二个参数是dom元素,react节点将会被挂载到该DOM元素上
自定义DOM属性
在react16之前,会忽略不识别的属性,而在react16之后,会将不识别的属性传递给dom元素
React AJAX(搭配jQuery)
通过componentDidMount()调用,通过componentWillUnmount()取消未完成的请求
Virtual-DOM实质上就是模拟DOM树结构,通过JavaScript对象来描述DOM对象,通过映射成真实的DOM节点来实现
对于DOM节点数据更新,则通过生成一个新的Virtual-DOM,两个Virtual-DOM通过Diff算法进行差异更新,将更新处理为真实的DOM
Virtual-DOM的优势:减少操作DOM,处理视图和状态的关系
没有任何框架能比原生DOM处理快,但是操作原生DOM可能导致浏览器的回流(回流是性能第一杀手),因此在复杂视图下,原生DOM操作就可能没有Virtual-DOM性能好了
react-markdown是react官方提供的库,专门用来解析md文件或者符合md语法的变量
安装react-markdown
yarn add react-markdown
导入
import ReactMarkdown from ‘react-markdown’
测试
let markdown =
"**这是加粗的文字**\n\n" +
"*这是倾斜的文字*`\n\n" +
"***这是斜体加粗的文字***\n\n" +
"~~这是加删除线的文字~~ \n\n" +
"`console.log(111)` \n\n" +
"``` var a=11; ```";
<ReactMarkdown source={markdown} escapeHtml={false} children={markdown}/>