开发环境搭建-这里使用yarn
安装yarn
特点
- 速度超快。
Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。
超级安全。
在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。
超级可靠。
使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。
安装
1
2
3
4
5// 1、下载node.js,使用npm安装
npm install -g yarn
查看版本:yarn --version
// 2、安装node.js,下载yarn的安装程序
// 下载地址 https://yarn.bootcss.com/docs/install/#windows-stable
创建项目
安装Node> = 6和npm> = 5.21
2
3
4
5
6// 已安装Node> = 6和npm> = 5.2
// 老方法
npm install -g create-react-app
create-react-app my-app
// npx方式
npx create-react-app my-app
1 | // npx介绍-可忽略 |
启动项目
1 | // cd到项目目录下 |
文件结构解析-自动创建的初始结构
1 | . |
基础知识
ES6 中的 bind(this)
在使用 React 中的 Class extends写法,如果 onClick 绑定一个方法就需要 bind(this),如果使用React.createClass 方法就不需要
解析:
React.createClass 是ES5 的写法默认绑定了 bind 写法
在 ES6 中新增了class,绑定的方法需要绑定 this,如果是箭头函数就不需要绑定 this
示例:
第一种写法:
1
2
3
4
5
6
7
8
9
10handleClick(e){
console.log(this)
}
render(){
return (
<div>
<h1 onClick={this._handleClick.bind(this)}>点击<h1>
</div>
)
}第二种写法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14constructor(props){
super(props)
this.handleClick=this.handleClick.bind(this)
}
handleClick(e){
console.log(this)
}
render(){
return(
<div>
<h1 onClick={this.handleClick}>点击</h1>
</div>
)
}第三种写法:
1
2
3
4
5
6
7
8
9
10
11handleClick=(e)=>{
//使用箭头函数
console.log(this)
}
render(){
return (
<div>
<h1 onClick={this.handleClick}>点击</h1>
</div>
)
}
JSX语法细节
注释写法
1
2
3
4
5
6
7
8
9
10
11
12render(){
return (
{/*注释内容*/}
或者
{
// 注释内容
}
<div>
<h1 onClick={this.handleClick}>点击</h1>
</div>
)
}元素添加class
class会被认为react的类,座椅这里使用className而不是class
1
2
3
4
5
6
7render(){
return (
<div className='test'>
<h1 onClick={this.handleClick}>点击</h1>
</div>
)
}dangerouslySetInnerHTML
在react中,通过富文本编辑器进行操作后的内容,会保留原有的标签样式,并不能正确展示。
在显示时,将内容写入__html对象中即可。具体如下:
1 <div dangerouslySetInnerHTML = {{ __html: checkMessages.details }} />
如果是直接调用接口中的值,则是以上的写法,如果是单纯的显示固定的内容,用如下的写法:
1 <div dangerouslySetInnerHTML={{ __html: '<div>123</div>' }} />
原理:
- dangerouslySetInnerHTMl 是React标签的一个属性,类似于angular的ng-bind;
- 有2个{ { } },第一{ }代表jsx语法开始,第二个是代表dangerouslySetInnerHTML接收的是一个对象键值对;
- 既可以插入DOM,又可以插入字符串;
不合时宜的使用 innerHTML 可能会导致 cross-site scripting (XSS) 攻击。 净化用户的输入来显示的时候,经常会出现错误,不合适的净化也是导致网页攻击的原因之一。dangerouslySetInnerHTML 这个 prop 的命名是故意这么设计的,以此来警告,它的 prop 值( 一个对象而不是字符串 )应该被用来表明净化后的数据。
htmlFor
由于 JSX 就是 JavaScript,一些标识符像 class 和 for 不建议作为 XML 属性名。作为替代,React DOM 使用 className 和 htmlFor 来做对应的属性。
1
2<label htmlFor="test"></label>
<input id="test" />