Search code examples
javascriptreactjs

React - uncaught TypeError: Cannot read property 'setState' of undefined


I am getting the following error

Uncaught TypeError: Cannot read property 'setState' of undefined

even after binding delta in the constructor.

class Counter extends React.Component {
    constructor(props) {
        super(props);

        this.state = {
            count : 1
        };

        this.delta.bind(this);
    }

    delta() {
        this.setState({
            count : this.state.count++
        });
    }

    render() {
        return (
            <div>
                <h1>{this.state.count}</h1>
                <button onClick={this.delta}>+</button>
            </div>
        );
    }
}

Solution

  • This is due to this.delta not being bound to this.

    Option A: In order to bind set this.delta = this.delta.bind(this) in the constructor:

    constructor(props) {
        super(props);
    
        this.state = {
            count : 1
        };
    
        this.delta = this.delta.bind(this);
    }
    

    Currently, you are calling bind. But bind returns a bound function. You need to set the function to its bound value.

    Option B: Use an arrow function:

    constructor(props) {
        super(props);
    
        this.state = {
            count : 1
        };
    
    }
    
    delta = ()=> {
        this.setState({
            count : this.state.count++
        });
    }