React-Fragnant和React-Strict

简介: React-Fragnant和React-Strict

1.Fragment:

  • 由于React规定, 组件中只能有一个根元素
    所以每次编写组件的时候, 我们都需要在最外层包裹一个冗余的标签
  • 如果不想渲染这个冗余的标签, 那么就可以使用Fragment来代替
    https://zh-hans.reactjs.org/docs/fragments.html
    如果组件的结构比较复杂, 那么只能有一个根元素
    可以使用 <React.Fragment>或者他的语法糖<>

<React.Fragment>
                <p>{this.state.heroList[0]}</p>
                <p>{this.state.heroList[1]}</p>
                <p>{this.state.heroList[2]}</p>
            </React.Fragment>

如果需要给Fragment添加key, 那么就不能使用语法糖

return (
                            <React.Fragment key={name}>
                              <p >{name}</p>
                            </React.Fragment>
                        )

class Home extends React.PureComponent{
    constructor(props){
        super(props);
        this.state = {
            heroList: ['鲁班', '虞姬', '黄忠']
        }
    }
    render() {
        // 如果组件的结构比较复杂, 那么只能有一个根元素
        return {
                {
                    this.state.heroList.map(name=>{
                        return (
                            <React.Fragment key={name}>
                              <p >{name}</p>
                            </React.Fragment>
                        )
                    })
                }
            </>
        )
    }
}
class App extends React.PureComponent{
    constructor(props){
        super(props);
    }
    render(){
        return (
            /*
            <React.Fragment id={'app'}>
                <Home/>
            </React.Fragment>
             */
            // 下面的这种写法就是上面写法的语法糖
            <>
                <Home/>
            </>
        )
    }
}
export default App;

<React.Strict>开启严格模式会检查过时的表达和不符合规范的操作


33.png

image.png

import React from 'react';
class App extends React.PureComponent{
    constructor(props){
        super(props);
        console.log('constructor');
    }
    render(){
        return (
            <div id={'app'}>
                <p ref={'myRef'}>我是段落</p>
                <button onClick={()=>{this.btnClick()}}>按钮</button>
            </div>
        )
    }
    btnClick(){
        console.log(this.refs.myRef);
    }
}
export default App;



目录
相关文章
|
小程序 测试技术 uml
电商小程序01需求分析
电商小程序01需求分析
|
人工智能 机器人 测试技术
使用LM Studio在本地运行LLM完整教程
GPT-4被普遍认为是最好的生成式AI聊天机器人,但开源模型一直在变得越来越好,并且通过微调在某些特定领域是可以超过GPT4的。
6137 1
|
Web App开发 缓存 编解码
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址
《FFmpeg开发实战》书中介绍了轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适用于复杂直播场景。SRS是一款强大的开源流媒体服务器,支持多种协议,起初为RTMP,现扩展至HLS、SRT等。在FFmpeg 6.1之前,推送给SRS的HEVC流不受支持。要播放RTMP流,Android应用可使用ExoPlayer,需在`build.gradle`导入ExoPlayer及RTMP扩展,并根据URL类型创建MediaSource。若SRS播放黑屏,需在配置文件中开启`gop_cache`以缓存关键帧。
450 2
FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址
|
存储 索引 Python
Python中序列类型 (Sequence Types)
【8月更文挑战第2天】
284 4
解决 010Edittor 复制右边到左边的问题
解决 010Edittor 复制右边到左边的问题
265 1
IDEA中一个项目如何导入另一个依赖的项目?
IDEA中一个项目如何导入另一个依赖的项目?
979 0
|
网络协议 网络架构
动图图解!既然IP层会分片,为什么TCP层也还要分段?
动图图解!既然IP层会分片,为什么TCP层也还要分段?
622 0
|
Prometheus 监控 Cloud Native
如何使用 Node Exporter 监控 Linux 上的磁盘 I/O
如何使用 Node Exporter 监控 Linux 上的磁盘 I/O
613 0
|
消息中间件 存储 JavaScript
消息队列原理和选型:Kafka、RocketMQ 、RabbitMQ 和 ActiveMQ
消息队列原理和选型:Kafka、RocketMQ 、RabbitMQ 和 ActiveMQ
消息队列原理和选型:Kafka、RocketMQ 、RabbitMQ 和 ActiveMQ
|
XML Java 数据库连接
Mybatis提示Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lan
Mybatis提示Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lan
462 0