在处理嵌套函数时如何将this
绑定到React组件?
这是一个骨架示例。 function2
嵌套的原因是您可以访问function1
中定义的变量
class View extends Component{
constructor(props){
this.function1 = this.function1.bind(this);
this.state = {
a = null;
}
}
componentDidMount(){
function1();
}
function1(){
console.log(this); //will show the component correctly
var param1 = 10;
//call a second function that's defined inside the first function
function2();
function function2(){
console.log(this); //undefined
var a = param1*2;
this.setState({ a : a}); //won't work because this is undefined
}
}
render(){
return(
<div>
<p> Hello </p>
</div>
)
}
}
答案 0 :(得分:6)
为什么不使用箭头功能?这样可以确保正确引用this
。我假设您可以使用ES6
。
function1 = () => {
console.log(this);
var param1 = 10;
const function2 = () => {
console.log(this);
var a = param1*2;
this.setState({ a });
}
function2(); // inkove the function
}
或者,如果您只想使用ES5
,那么这也可以使用
function1() {
console.log(this);
var param1 = 10;
function function2() {
console.log(this);
var a = param1*2;
this.setState({ a });
}
function2.bind(this)() // to invoke the function
}
答案 1 :(得分:1)
您可以保留对this
的引用,并在function2
内使用该变量。
function1(){
var self = this;
.....
function function2(){
console.log(self);
....
}
}
您还可以使用apply
,bind
或call
设置该功能的上下文。例如:
function2.call(this);