欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

react16的新特性实例介绍

程序员文章站 2022-06-05 15:33:53
react 16 的好处: 1:新的核心算法 fiber react 新的算法,更加友好; 2:render可以return数组 ,字符串 可以return数组 不需要包p...

react 16 的好处:

1:新的核心算法 fiber

react 新的算法,更加友好;

2:render可以return数组 ,字符串

可以return数组 不需要包p; 但是必须有对应的key;

3:错误处理机制

增加了抛异常的生命周期函数

  componentdidcatch(err,info){

        this.setstate({iserror:1});
    }

这样页面报错 我们就可以委婉的换个方式展示了~~!!1

4:portals

弹窗组件; 是body的儿子节点,不是嵌套在组件内的组件;

5:更好更快的服务端渲染

服务端使用流的方式使得 提升了服务端的渲染 速度增*倍 ;

从rendertostring()到rendertonodestream();

要该改写页面;

  //首先 的话 先把第一节 代码书写带前端
    res.write(`<!doctype html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
            <meta name="theme-color" content="#000000">
                <link rel="stylesheet" href=${assetmanifest["main.css"]}>
                  
                        <title>51job</title>
    </head>
    <body>
    <p id="root">`);
 
    const markupstream=reactdomserver.rendertonodestream((
        
            <provider store={store}>
                <staticrouter
                context={context}
                location={req.url}
                >
                    <app/>
                </staticrouter>
            </provider>
 
        )
    );
 
    //第二步,把markupstream 推到res上 ,并且声明没有结束;
    markupstream.pipe(res,{end:false});
 
    //第三步;监听markupstream 结束事件 ;
     markupstream.on("end",()=>{
        res.write(`</p>
    </body>
    <script src=${assetmanifest["main.js"]}></script>
    </html>`); 
        //最后结束渲染;
        res.end()
    })

并且 前端展示的react-dom的render方法就不能用了需要 改写为:hydrate;

首先说一下为什么使用hydrate而不是render,这个是react 16版本中的一个变更,hydrate主要是用于给服务端渲染出的html结构进行“注水”,由于新版本中ssr出的dom节点不再带有data-react,为了能尽可能复用ssr的html内容,所以需要使用新的hydrate方法进行事件绑定等客户端独有的操作。

6:体积更小;mit协议;

减少体积30%; mit完全开源;