React进阶-JSX防踩坑的几个地方_invalid dom property `class`. did you mean `classn-程序员宅基地

技术标签: React.js  reactjs  javascript  

1.JSX代码注释

我第一次写JSX的注释,是直接像以前js注释写的,当然这样写是不对的。

<Fragment>
    //第一次写注释,这个是错误的
    <div>
        <input value={
    this.state.inputValue} onChange={
    this.inputChange.bind(this)} />
        <button onClick={
    this.addList.bind(this)}> 增加服务 </button>
    </div>
</Fragment>

JSX注释,有以下两种写法。

<Fragment>
    {
    /* 正确注释的写法 */}
		{
    
        //正确注释的写法 
    }
    <div>
        <input value={
    this.state.inputValue} onChange={
    this.inputChange.bind(this)} />
        <button onClick={
    this.addList.bind(this)}> 增加服务 </button>
    </div>
</Fragment>

推荐第一种注释。

2.JSX中的class陷阱

比如要给朴素单纯的界面,加入黄色成分,让我们的文本框又粗又黄。我们先来错误演示。

第一步:先写一个CSS样式文件,在src目录下,新建一个style.css的样式文件。

.input {
    border:3px solid #ae7000}

第二步:在Xiaojiejie.js里引入,先用import进行引入

import './style.css'

第三部:给JSX加入class,注意下面的代码是错误的。

<input class="input" value={this.state.inputValue} onChange={this.inputChange.bind(this)} />

虽然现在页面是可以正常显示结果的,但是你代开浏览器控制台会发现Warning警告。

index.js:1437 Warning: Invalid DOM property `class`. Did you mean `className`?
    in input (at SmailSmailGirl.js:19)
    in div (at SmailSmailGirl.js:18)
    in Xiaojiejie (at src/index.js:5)

意思就是要把class换成className,它是防止和js中的class类名 冲突,所以要求换掉。这也算是一个小坑吧。

3.JSX中的html解析问题

如果想在文本框里输入一个<h1>标签,并进行渲染。默认是不会生效的,只会把<h1>标签打印到页面上,这并不是我想要的。如果工作中有这种需求,可以使用dangerouslySetInnerHTML属性解决。具体代码如下:

<ul>
    {
        this.state.list.map((item,index)=>{
            return (
                <li 
                    key={index+item}
                    onClick={this.deleteItem.bind(this,index)}
                    dangerouslySetInnerHTML={
   {__html:item}}
                >
                </li>
            )
        })
    }
</ul> 

上面的代码就可以实现html格式的输出。

4.JSX中

JSX中<label>的坑,也算是比较大的一个坑,label是html中的一个辅助标签,也是非常有用的一个标签。

先看下面的代码,我们在文本框前面加入一个<label>

<div>
    <label>加入服务:</label>
    <input className="input" value={this.state.inputValue} onChange={this.inputChange.bind(this)} />
    <button onClick={this.addList.bind(this)}> 增加服务 </button>
</div>

这时候想点击“加入服务”直接可以激活文本框,方便输入。按照html的原思想,是直接加ID就可以了。代码如下:

<div>
    <label for="jspang">加入服务:</label>
    <input id="jspang" className="input" value={this.state.inputValue} onChange={this.inputChange.bind(this)} />
    <button onClick={this.addList.bind(this)}> 增加服务 </button>
</div>

这时候你浏览效果虽然可以正常,但console里还是有红色警告提示的。大概意思是不能使用for.它容易和javascript里的for循环混淆,会提示你使用htmlfor

<div>
    <label htmlFor="jspang">加入服务:</label>
    <input id="jspang" className="input" value={this.state.inputValue} onChange={this.inputChange.bind(this)} />
    <button onClick={this.addList.bind(this)}> 增加服务 </button>
</div>

这时候代码就正确了,可以实现点击<label>后,激活<input>标签了。

个人博客:Karma‘s Blog
源码地址:传送门

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40826349/article/details/108967336

智能推荐

Flutter 多语言自动化本地化生成器_flutter 生成多语言命令-程序员宅基地

文章浏览阅读1.2k次,点赞22次,收藏22次。简体中文 |这是一个为Flutter设计的插件,通过从Excel表格提取的CSV文件自动生成Dart本地化文件,以简化应用程序本地化的流程。这个工具通过自动化创建多语言资源文件,简化了开发人员和翻译人员的工作流程。_flutter 生成多语言命令

python免费安装安装教程,python免安装版本怎么用-程序员宅基地

文章浏览阅读242次,点赞5次,收藏4次。执行完成python根目录会自动创建Lib和Scripts文件夹, 需要将 Lib\site_packages 这一段路径写到 python*._pth中(或者删除#号),或者不修改文件,将此文件夹中的 pip文件夹拷贝到 python 解压的路径中(python.exe 所在路径)。清华源安装some-package:python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package。

织梦DedeCMS列表“加载更多”“无限下拉”Ajax加载使用方法-程序员宅基地

文章浏览阅读397次。记录一次项目经历,需要在DEDECMS中用到无限下拉替换点击分页功能,分享下,记录点滴,需要的可以共同交流!Infinite Ajax Scroll简称ias,无限的ajax滚动,是一款jQuery滚动ajax分页插件,当页面滚动到容器可见部分将自动异步加载数据。下面先来看看效果。无限下拉效果点击加载更多效果插件说明炒鸡简单,不用改动程序内核文件,不用懂php代码支持“加载更多”支持“无限下拉”支持动静态支持图片延迟加载插件的集成很简单,分以下几个步骤..

行列式因子、不变因子、初等因子、smith标准型、Jordan标准型、最小多项式的matlab实现_求解不变因子代码是什么-程序员宅基地

文章浏览阅读2.4w次,点赞13次,收藏74次。关于行列式因子、不变因子、初等因子、smith标准型、Jordan标准型、最小多项式的定义应用实例***行列式因子、不变因子、初等因子、smith标准型、Jordan标准型、最小多项式的matlab实现..._求解不变因子代码是什么

php $_SERVER 学习详解_$_server['content-type'];-程序员宅基地

文章浏览阅读881次。$_SERVER 示例keyvalue备注USERwww-data执行php的用户名HOME/var/www执行php的用户名的用户路径HTTP_COOKIEuser_cookie=test; user_test=cookie;用户cookieHTTP_ACCEPT_LANGUAGEen-US,en;q=0.9,zh-CN;q=0.8,zh;..._$_server['content-type'];

mac 加载www_mac assetbundle.loadfromfile-程序员宅基地

文章浏览阅读313次。mac下用assetbundle.loadfromfile 可以直接用application.streamingAsset但是用www则需要加前缀 file://_mac assetbundle.loadfromfile

随便推点

excal造数据_char(97+rand()*26)-程序员宅基地

文章浏览阅读130次。然后右边滑块到上面 shfit+鼠标左键 框选数字填充创建随机英文名 选中单元格 =char(97+rand()*26)&char(97+rand()*26)&char(97+rand()*26)&char(97+rand()*26)&char(97+rand()*26)&char(97+rand()*26)随机生成时间选择日期 – 然后日期类型 -确定在此单元格输入—>之后自动生成(单元格右下角-黑色十-双击左键)自己理解._char(97+rand()*26)

浅谈kubernetes部署:UI部署_kubernetesui-程序员宅基地

文章浏览阅读1.6k次。在此之前请确认您已经按《配置docker私服密钥》的说明配置了私服密钥。根据以上内容可以了解到UI部署流程想了解更多详情,可以持续关注。修改相应image值为您的镜像目录。《openresty镜像制作》以阿里云docker私服举例。待网关部署完成后一起验证。_kubernetesui

[翻译] DSL和模型驱动开发的最佳实践(2/4)-程序员宅基地

文章浏览阅读73次。视点ViewPoints 一个软件系统通常情况下只用一个符号是不可能描述他所有的方面的, 此外,为了开发流程的需要,不同的方面,在不同的时间里,会被不同的角色描述,因为你要保证有一个干净的概念分离.因此,最重要的是找出描述一个系统不同概念的这些视点,为他们单独提供表现符号和抽象. 在一些系统中意味着你要为不同的关注点定义单独的..._dsl实践

扩散模型(Diffusion Model)最新综述!-程序员宅基地

文章浏览阅读1.7w次,点赞22次,收藏183次。点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达本综述来自西湖大学李子青实验室、香港中文大学Pheng-Ann Heng和浙江大学陈广勇团队,对现有的扩散生成模型进行了全面的回顾。本文首先提出了diffusion model改进算法的细化分类与深度解析,同时对diffusion model的应用进行了系统的回顾,最后率先汇总领域内benchmarks。这也促进了后续工作《Dif...

吴恩达教你读学术论文 + 如何读论文?_吴恩达教授读论文-程序员宅基地

文章浏览阅读310次。吴恩达教你读学术论文How You Should Read Research Papers According To Andrew Ng (Stanford Deep Learning Lectures)https://www.zhihu.com/question/345516318_吴恩达教授读论文

BugKu CTF(杂项篇MISC)练习—又一张图片,还单纯吗-程序员宅基地

文章浏览阅读299次,点赞2次,收藏2次。首先学习jpg文件结构知识,了解文件开始ff d8和结尾标志ff d9使用010 Editor打开查看文件结构,发现隐藏文件使用foremost工具对文件进行分离,使用方法:分离文件的步骤:1.将所要解密的文件放入foremost所在的目录;2.cmd进入foremost所在目录,cd 文件夹路径3.foremost 待分离的文件名这样就会生成一个输出文件夹output。得到flag!!!!

推荐文章

热门文章

相关标签