《react.js小书》读书笔记一

  • cindy Liu
  • 7 Minutes
  • January 10, 2019

《react.js》小书非常基础,适合入门新手,非常好理解,规定自己三天时间内阅读完并确保最基本的知识都掌握了,将一些平时回忽略的注意点做了小笔记和总结

《react.js小书》读书笔记二
《react.js小书》读书笔记三
在线阅读:http://huziketang.com/books/react/
在线OJ试题:http://scriptoj.mangojuice.top/problemsGroups/593a2e29b3838c385539fa4f

第一阶段

探讨了如下几个问题:

优化DOM操作

解决方案:一旦状态发生改变,就重新调用render方法,构建一个新的DOM(更新state->更新html结构的字符串->更新DOM->更新页面),也就是说,只要调用setState组件就会重新渲染,这就消除了手动的DOM操作。

jsx原理

React.createElement会构建一个js对象来描述HTML结构信息,包括标签名、属性、子元素等。所谓JSX其实就是javascript对象
jsx到页面经历了以下过程:

事件监听

event对象

react.js不需要考虑不同浏览器兼容性的问题,由类似于w3c标准的event.stopPropagation、event.preventDefault等常用方法。

关于事件中的this

一般在某个类的实例方法里面的 this 指的是这个实例本身。但是你在react组件的的方法中把 this 打印出来,你会看到 this 是 null 或者 undefined。

1
2
3
handleClickOnTitle (e) {
console.log(this) // => null or undefined
}

这是因为 React.js 调用你所传给它的方法的时候,并不是通过对象方法的方式调用(this.handleClickOnTitle),而是直接通过函数调用 (handleClickOnTitle),所以事件监听函数内并不能通过 this 获取到实例。

如果你想在事件函数当中使用当前的实例,你需要手动地将实例方法 bind 到当前实例上再传入给 React.js。

1
2
3
4
5
6
7
8
9
10
11
class Title extends Component {
handleClickOnTitle (e) {
console.log(this)
}

render () {
return (
<h1 onClick={this.handleClickOnTitle.bind(this)}>React 小书</h1>
)
}
}

组件的state和setState

props

static defaultProps = {
    likedText: '取消',
    unlikedText: '点赞'
}

state vs props

总结

实践

第一阶段的实战部分比较简单,实现的功能类似之前我的一个小demo,详情可以见(react +mock.js 实现留言列表)