reactjs - 未捕获的类型错误 : Cannot read property 'state or props' of undefined

标签 reactjs ecmascript-6 es6-class

所以我开始将我的应用程序从 ES2015 转换为使用 React 的 ES6。

我有一个父类和一个子类,就像这样,

export default class Parent extends Component {
    constructor(props) {
        super(props);
        this.state = {
            code: ''
        };
    }

    setCodeChange(newCode) {
        this.setState({code: newCode});
    }


    login() {
        if (this.state.code == "") {
            // Some functionality
        }
    }

    render() {
        return (
            <div>
                <Child onCodeChange={this.setCodeChange} onLogin={this.login} />
            </div>
        );
    }
}

child 类,

export default class Child extends Component {
    constructor(props) {
        super(props);
    }

    handleCodeChange(e) {
        this.props.onCodeChange(e.target.value);
    }

    login() {
        this.props.onLogin();
    }

    render() {
        return (
            <div>
                <input name="code" onChange={this.handleCodeChange.bind(this)}/>
            </div>
            <button id="login" onClick={this.login.bind(this)}>
        );
    }
}

Child.propTypes = {
    onCodeChange: React.PropTypes.func,
    onLogin: React.PropTypes.func
};

但是这会导致以下错误,

this.state 未定义

它指的是,

if (this.state.code == "") {
    // Some functionality
}

知道是什么原因造成的吗?

最佳答案

您可以使用箭头函数来绑定(bind)您的函数。您需要在子组件和父组件中绑定(bind)函数。

父级:

export default class Parent extends Component {
    constructor(props) {
        super(props);
        this.state = {
            code: ''
        };
    }

    setCodeChange = (newCode) => {
        this.setState({code: newCode});
    }


    login = () => {
        if (this.state.code == "") {
            // Some functionality
        }
    }

    render() {
        return (
            <div>
                <Child onCodeChange={this.setCodeChange} onLogin={this.login} />
            </div>
        );
    }
}

child

export default class Child extends Component {
    constructor(props) {
        super(props);
    }

    handleCodeChange = (e) => {
        this.props.onCodeChange(e.target.value);
    }

    login = () => {
        this.props.onLogin();
    }

    render() {
        return (
            <div>
                <input name="code" onChange={this.handleCodeChange}/>
            </div>
            <button id="login" onClick={this.login}>
        );
    }
}

Child.propTypes = {
    onCodeChange: React.PropTypes.func,
    onLogin: React.PropTypes.func
};

还有其他方法可以绑定(bind)函数,例如您正在使用的方法,但您也需要对父组件执行此操作,如 <Child onCodeChange={this.setCodeChange.bind(this)} onLogin={this.login.bind(this)} />

或者您可以在构造函数中指定绑定(bind)为

父级:

constructor(props) {
    super(props);
    this.state = {
        code: ''
    };
 this.setCodeChange = this.setCodeChange.bind(this);
 this.login = this.login.bind(this);
}

child

constructor(props) {
    super(props);
    this.handleCodeChange = this.handleCodeChange.bind(this);
    this.login = this.login.bind(this);
}

关于reactjs - 未捕获的类型错误 : Cannot read property 'state or props' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39503559/

相关文章:

reactjs - 徽章组件的自定义颜色不起作用

javascript - ES6 - Promise.all 在 Promise.resolve 中

javascript - Object.assign() 和 Spread 属性仍在改变原始属性

javascript - 用于生产的 uglify/webpack 之后的每个类的 Class.name 始终为 'e'

javascript - Proxyquire 没有 stub 我需要的类(class)

javascript - 嵌套 react 路由器 : hide parent component on showing nested child component

java - ReactJS 返回解析器错误 SyntaxError : Unexpected token a after AJAX call to JAVA servlet

reactjs - DC.JS Scrollable Rowchart 在 React 中没有间隙

javascript - 如何计算按钮点击次数

javascript - 如何在 Javascript 类定义内部(外部)定义原型(prototype)方法?