代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
</head>
<body>
<div id="app"></div>
</body>
</html>
<script type="text/babel">
class ComClass extends React.Component {
constructor() {
super();
this.state = {
a: 1
}
}
setA() {
console.log(this);
}
setA1 = () => {
this.setState({
a: 2
})
}
setA2(v) {
this.setState({
a: v
})
}
setA3(v) {
this.setState({
a: v
})
}
render() {
return (
<div>
<h1>这个是class组件</h1>
<p>{this.state.a}</p>
<button onClick={this.setA}>setA</button>
<button onClick={this.setA1}>setA1</button>
<button onClick={this.setA2.bind(this, 3)}>setA2</button>
<button onClick={() => { this.setA3(4) }}>setA3</button>
<button onClick={() => { this.setState({ a: 5 }) }}>直接修改</button>
</div>
)
}
}
ReactDOM.render(<ComClass />, document.querySelector("#app"));
</script>
总结
使用方式 | 定义方法方式 | 结论 |
---|
this.xxx | xxx(){} | 打印不出this、无法传参、无法修改值 |
this.xxx | xxx=()=>{} | 可以打印出this、无法传参、只能修改死值 |
this.xx.bind(this,xx) | xxx(v){} | 可以打印出this、可以传参、可以修改值 |
()=>{this.xxx(x)} | xxx(v){} | 可以打印出this、可以传参、可以修改值 |
()=>{this.setState({a:5})} | — | 不用定义方法,可以直接修改值 |