以下纯属笔记,这些技术胖视频有
JSX代码注释
JSX中的代码注释是非常有讲究的,这个书上介绍的也非常少,所以在这里讲一下,因为技术胖在初学React在这里踩过坑。
//第一次写注释,这个是错误的
{/* 正确注释的写法 */}
{
//正确注释的写法
}
可以把这个理解为,在jsx中写javascript代码。所以外出我们套入了{},然后里边就是一个javascript注释
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 Xiaojiejie.js:19)
in div (at Xiaojiejie.js:18)
in Xiaojiejie (at src/index.js:5)
意思就是要把class换成className,它是防止和js中的class类名 冲突,所以要求换掉
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格式的输出。
JSX中<label>标签的坑
JSX中<label>的坑,也算是比较大的一个坑,label是html中的一个辅助标签,也是非常有用的一个标签。
先看下面的代码,我们在文本框前面加入一个<label>。
<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>标签了。
浙公网安备 33010602011771号