javascript - 为什么我们在 React 组件中使用 this.setState() 而不是 super.setState()

标签 javascript reactjs ecmascript-6

我是 React 的新手,我注意到我们使用 this.setState() 而不是 super.setState() 请我清楚地解释为什么我们用它来调用父类(super class)方法?? 示例:

class Checkbox extends React.Component {
        constructor(props) {
            super(props)
            this.state = {
                checked: true
            }
            this.handleCheck = this.handleCheck.bind(this)
        }

        handleCheck() {
            this.setState({
                checked: !this.state.checked
            })
        }

        render() {
            var msg 
            if(this.state.checked) {
                msg = "checked"
            } else {
                msg = "not checked"
            }
            return (
                <div>
                    <input type="checkbox" 
                           onChange={this.handleCheck}
                           defaultChecked={this.state.checked}/>
                    <p>This box is {msg}</p>
                </div>
            )
        }
    }       

最佳答案

这就是 JavaScript 继承的工作原理。 Checkbox 子类的实例典型地继承自 React.Component 父类,this.setState === super.setState

super.method 只有在子类中被覆盖时才应该被引用,它通常出现在被覆盖的方法本身中:

method() {
  super.method(); // inherit the behaviour from parent class
  // do something else
}

否则使用 super.method() 可以被认为是语义错误,这表明开发人员没有意识到继承机制。如果某个方法稍后将被覆盖,则它不会因此而被使用(尽管在 setState 的情况下不太可能)。

super.method() 的使用还要求开发人员了解父类的实现。如 this answer 中所述,只有父原型(prototype)方法而不是实例方法可用作 super。如果父类有实例方法,

method = () => {...}

子类将继承它作为 this.method 但不会有 super.method

关于javascript - 为什么我们在 React 组件中使用 this.setState() 而不是 super.setState(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49709496/

相关文章:

javascript - 什么应该是一个组件?

javascript - 服务器上存储的示例歌曲

javascript - Chrome 返回字符串 "FY 2000"的有效日期而不是无效日期

reactjs - 范围错误 : Invalid typed array length: -4095 when running my react web app

javascript - 如何更新值以便 Mobx 进行渲染?

javascript - 我如何在 React 中重用一个方法来处理多个不同的引用?

javascript - 解构赋值。在两个不同的变量中分配对象及其子对象

javascript - 在 JavaScript 中正确合并两个函数

javascript - 回溯算法创建一个 "jumbled"但不是随机数组

javascript - 在 Javascript 中将日期四舍五入到最近的一天。