export class Shijian extends React.Component {
constructor() {
super();
this.state = {
count: 10
}
}
render() {
return (<div>
<h1>计数器:{this.state.count}</h1>
<button onClick={()=> {
this.setState({count: this.state.count + 1})
}}>按钮</button>
</div>)
}
};
- JSX 中掺杂过多 JS 逻辑代码,会显得非常混乱
- 推荐:将逻辑抽离到单独的方法中,保证JSX 结构清晰
方法
1、 箭头函数里面的this并不是自己决定的,而是由外部环境决定的,外部环境中this是谁箭头函数里面的this就是谁
- 利用箭头函数自身不绑定this的特点
- render() 方法中的 this 为组件实例,可以获取到setState()
class Hello extends React.Component {
onIncrement() {
this.setState({ … })
}
render() {
return (
<button onClick={() => this.onIncrement()}></button>
)
}
}
2、
export class Shijian extends React.Component {
constructor() {
super();
this.state = {
count: 10
}
};
handleCount() {
this.setState({count: this.state.count + 1})
};
render() {
return (<div>
<h1>计数器:{this.state.count}</h1>
<button onClick={this.handleCount.bind(this)}>按钮</button>
</div>)
}
};
- 利用ES5中的bind方法,将事件处理程序中的this与组件实例绑定到一起
- constructor中的this也是指向实例的
class Hello extends React.Component {
constructor() {
super()
this.state = {
count: 10
};
this.onIncrement = this.onIncrement.bind(this);
}
onIncrement() {
this.setState({ … })
}
render() {
return (
<button onClick={this.onIncrement}></button>
)
}
export class Shijian extends React.Component {
constructor() {
super();
this.state = {
count: 10
};
this.handleCount = this.handleCount.bind(this)
};
handleCount() {
this.setState({count: this.state.count + 1})
};
render() {
return (<div>
<h1>计数器:{this.state.count}</h1>
{}
<button onClick={this.handleCount}>按钮</button>
</div>)
}
};
3、class 的实例方法
- 利用箭头函数形式的class实例方法
- 注意:该语法是实验性语法,但是,由于babel的存在可以直接使用
绝对可以用呀,直接就指向的是实例的this
class Hello extends React.Component {
onIncrement = () => {
this.setState({ … })
}
render() {
return (
<button onClick={this.onIncrement}></button>
)
}
}
export class Shijian extends React.Component {
constructor() {
super();
this.state = {
count: 10
};
};
handleCount = () => {
this.setState({count: this.state.count + 1});
}
render() {
return (<div>
<h1>计数器:{this.state.count}</h1>
{}
<button onClick={this.handleCount}>按钮</button>
</div>)
}
};
推荐使用方法三
|