将其绑定到React

时间:2018-02-08 02:41:15

标签: javascript reactjs

在处理嵌套函数时如何将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>
        )
    }
}

2 个答案:

答案 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);
        ....
    } 
}

您还可以使用applybindcall设置该功能的上下文。例如:

function2.call(this);