React中constructor(props){}究竟是什么,以及super(props)与super()
定义class组件,为什么需要加上 super() ?
- 我们尝试去掉 super() 看看编译的结果:
1 2 3 4 | constructor() { this .state = {searchStr: '' }; this .handleChange = this .handleChange.bind( this ); } |
编译错误:
提示没有在this之前加上super()
其实就是少了super(),导致了this的 Reference Error
1 2 3 4 5 6 7 8 9 | class MyComponent extends React.Component { constructor() { console.log( this ); // Reference Error } render() { return <div>Hello { this .props.name}</div>; } } |
2.那super的作用究竟是什么?
super关键字,它指代父类的实例(即父类的this对象)。
子类必须在constructor方法中调用super方法,否则新建实例时会报错。
这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。
如果不调用super方法,子类就得不到this对象。
3.正确的姿势
1 2 3 4 5 | constructor() { super (); this .state = {searchStr: '' }; this .handleChange = this .handleChange.bind( this ); } |
React的官方例子中都是加上了 props 作为参数
1 2 3 4 5 | constructor(props) { super (props); this .state = {searchStr: '' }; this .handleChange = this .handleChange.bind( this ); } |
4.加与不加props的区别究竟在哪里呢?
React中constructor(props){}究竟是什么,以及super(props)与super() 它们的区别在哪儿呢?
What's the difference between “super()” and “super(props)” in React when using es6 classes?
借用下stackoverflow上的解释
There is only one reason when one needs to pass props to super(): When you want to access this.props in constructor. (Which is probably redundant since you already have a reference to it.)
意思是说:
只有一个理由需要传递props作为super()的参数,那就是你需要在构造函数内使用this.props
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-02-02 如何在没有https环境下使用webrtc