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}/>