1. 两种获取dom节点 的方式

import React, {Fragment} from 'react'

class Test extends React.Component {
constructor(props) {
super(props);
// 创建
this.third = React.createRef();
}
componentDidMount(){
// note: 不同的方式创建ref, 取值方式不同
console.log(this.second) // <input value="second">
console.log(this.third.current); // <input value="third">
}
render() {
// 赋值
return (
<Fragment>
<input value="second" ref={(inputRef) => this.second = inputRef} />
<input value="third" ref={this.third} />
</Fragment>
)

}
}

export default Test

进阶:React.forwardRef

2. setState

在 React 内部,采用的是对象合并的操作,就和我们所熟知的 Object.assign() 执行的结果一样。( 在 React.js 内部会把 JavaScript 事件循环中的消息队列的同一个消息中的 setState

都进行合并以后再重新渲染组件。)

setState 还可以接受函数, 这样就直接更新了

this.setState((prevState, props) => ({ count: prevState.count + 1 }));

如果需要在完成更新后操作,可以在第二个参数callback回调中使用:

this.setState({foo: 123}, ()=> {
console.log(foo);
// 123
});

3. 子组件可以设置defaultProps默认值

class LikeButton extends Component {
static defaultProps = {
likedText: '取消',
}
constructor () {
super()
}
}

如果父组件likedText 属性没有传进来,会直接使用 defaultProps 中的默认属性