javascript - 在 React JS 中将 props 从一个类组件传递到另一个类组件

标签 javascript reactjs

我正在学习 React js 的初学者类(class)。我遇到了类组件,我想知道 props 对象是如何初始化的。

例如:

主要组件:

class App extends React.Component {
    render() {
        return (
            <div>
                <Header username="xyz"/>
            </div>
        )
    }
}

标题:

class Header extends React.Component {
    render() {
        return (
            <div>
                <p>Welcome, {this.props.username}</p>
            </div>
        )
    }
}

我想知道 Header 类中的 props 对象是否正在初始化?

不应该是这样的吗:

class Header extends React.Component {
    constructor(props) {
        super()
        this.props = props
    }
    render() {
        return (
            <div>
                <p>Welcome, {this.props.username}</p>
            </div>
        )
    }
}

通过使用上面的代码,我收到一条消息:

ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor

我的问题是,如果我们想向类传递任何内容,难道不应该使用构造函数来完成吗?

最佳答案

通过扩展 React.Component,React 可以为你做到这一点。

切勿在接收组件内更改 props 对象。 React 类组件将收集您传递给组件的所有参数,并通过通用名称“props”引用它们。这就是为什么您不必在构造函数中自己执行此操作。

然而,在现代 React 中,类组件很少被使用。原因是类组件很容易导致复杂的生命周期管理。

作为函数而不是类编写的 Header 组件将如下所示:

const Header = (props) => (
  <div>
      <p>Welcome, {props.username}</p>
  </div>
)

直接解构 props 也很常见,这样你就永远不会真正访问 props 对象,如下所示:

const Header = ({username}) => (
  <div>
      <p>Welcome, {username}</p>
  </div>
)

对于功能组件,您可以自由地为 Prop 使用任何您想要的名称。但我不会这样做,因为人们习惯于将 Prop 称为 Prop 。但这也可以:

const Header = (params) => (
  <div>
      <p>Welcome, {params.username}</p>
  </div>
)

关于javascript - 在 React JS 中将 props 从一个类组件传递到另一个类组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71870278/

相关文章:

javascript - 从类名中找到前一个是textnode

css - 使用 react-bootstrap 进行网格布局时遇到问题

css - 制作一个可拖动的分割面板,就像CodeSandbox的控制台一样

javascript - TS 错误 - 创建自定义 react 警报组件

javascript - 在 IE10 中拒绝访问本地存储

javascript - 如何在 PhalconPHP 2.x 中放置自定义 js 代码?

javascript - 在 React/JSX 中将花括号呈现为纯文本

javascript - 使用semantic-ui-react显示svg?

reactjs - React-Redux componentWillReceiveProps 未使用 api 数据触发

javascript - 如何对分页项目执行 "go back"