为啥react的组件要super

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥react的组件要super相关的知识,希望对你有一定的参考价值。

参考技术A 调用super的原因:在ES6中,在子类的constructor中必须先调用super才能引用this
super(props)的目的:在constructor中可以使用this.props
最后,可以看下React文档,里面有一段
Class components should always call the base constructor with props.
参考技术B 解释一:
调用super的原因:在ES6中,在子类的constructor中必须先调用super才能引用this
super(props)的目的:在constructor中可以使用this.props
最后,可以看下React文档,里面有一段
Class components should always call the base constructor with props.本回答被提问者采纳

React Prop 渲染为对象 - 不明白为啥

【中文标题】React Prop 渲染为对象 - 不明白为啥【英文标题】:React Prop rendering as object - don't understand whyReact Prop 渲染为对象 - 不明白为什么 【发布时间】:2017-02-06 20:14:58 【问题描述】:

我是 React 的新手,我只是想不通...

我正在尝试将我的状态传递给父组件中的道具,然后在子组件中呈现该状态。像这样:

父组件

class App extends Component 
   constructor(props) 
      super(props);
      this.state = 
         text: 'hello'
      
   
   render() 
      return (
         <div className="App">
            <MessageList textProp=this.state.text/>
         </div>
      );
   

子组件

const MessageList = textProp => 
   return (
   <div className='MessageList'>
      textProp
   </div>
   )

React 无法正确渲染,声称它是一个正在尝试渲染的对象。

我可以使用textProp.textProp 访问该属性,为什么它会渲染一个包含同名属性的对象?

我相信这很简单,但我可以解释一下!

提前致谢。

【问题讨论】:

【参考方案1】:

组件的 props 是一个对象,就像它们的状态是一个对象一样。因此,您想要更多类似的东西:

const MessageList = props => 
   return (
   <div className='MessageList'>
      props.textProp
   </div>
   )

或者,使用解构:

const MessageList = ( textProp ) => 
   return (
   <div className='MessageList'>
      textProp
   </div>
   )

【讨论】:

谢谢!完美解释。【参考方案2】:

当您声明无状态组件时,您需要指定您希望它接收的参数,在您的情况下可以是 (props)( specific )

const MessageList = ( textProp ) => (
 <div className='MessageList'>
      textProp
   </div>
);

请注意我如何使用=&gt; () 来返回标记,您不必对 return () 进行操作,这只是一个提示,可以更好地运行:)

【讨论】:

为小费干杯!我实际上忘记了箭头函数的额外优势......【参考方案3】:

MessageList 中的textProp 是来自父级的props 的集合。在您的情况下,该集合将只有 textProp. 要完成这项工作,您需要执行以下操作。

const MessageList = ( textProp ) => 
   return (
   <div className='MessageList'>
      textProp
   </div>
   )

const MessageList = (textProp) => 
   return (
   <div className='MessageList'>
      textProp.textProp
   </div>
   )

【讨论】:

以上是关于为啥react的组件要super的主要内容,如果未能解决你的问题,请参考以下文章

为啥react的组件要super

理解为啥在 React 类组件中不推荐使用 super()

为什么react的组件要super(props)

React,为啥在 ES6 类构造函数中使用 super(props)? [复制]

为啥我们在 React 中创建类组件时要扩展 React.Component?

React Prop 渲染为对象 - 不明白为啥