首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的嵌套React组件不呈现?

为什么我的嵌套React组件不呈现?
EN

Stack Overflow用户
提问于 2017-04-30 23:39:27
回答 5查看 28.4K关注 0票数 31

我的反应元件出问题了。我的组件ControlPanel的嵌套子组件似乎没有呈现。这是我的代码:

代码语言:javascript
复制
class App extends Component {
  render() {
    return (
      <div className="App">
        <ControlPanel>
          <CustomerDisplay />
        </ControlPanel>
      </div>
    );
  }
}

在这个文件的顶部有以下两行:

代码语言:javascript
复制
import ControlPanel from './components/control_panel';

import CustomerDisplay from './components/customer_display';

下面是我的ControlPanel组件:

代码语言:javascript
复制
import React from 'react';
import CSSModules from 'react-css-modules';
import styles from './styles.scss';

const ControlPanel = () => {
    return (
      <div className="control_panel" id="control_panel">

      </div>
    );
}

export default CSSModules(ControlPanel, styles);

我试过:

  • 将组件调用为完整的HTML标记(开始和关闭)
  • 嵌套CustomerDisplay组件中的ControlPanel组件(在ControlPanel的index.jsx文件中)

我知道嵌套组件是可能的。我已经看过了。因为某种原因它对我不起作用。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-04-30 23:47:33

要允许组件包含子组件并正确地呈现它们,您必须使用this.props.children。这将传递给以子组件作为支柱的所有组件,并包含组件的子组件,正如反应文件所解释的那样

安全壳 一些组件不知道他们的孩子提前。这对于表示通用“方框”的SidebarDialog这样的组件尤其常见。 我们建议这些组件使用特殊的支柱将子元素直接传递到它们的输出中: 函数FancyBorder(props) {返回( {props.children} );} 这允许其他组件通过嵌套JSX将任意子组件传递给它们。 函数WelcomeDialog() {返回(欢迎您访问我们的航天器!);}

正如文档中所描述的,有些组件不知道它们的子组件--它们可能是通用包装器或内容框,这就是您的ControlPanel。因此,要呈现组件的子组件,必须在父级的children方法中显式地呈现来自render支柱的子元素。因此,这样将其应用于您的代码:

代码语言:javascript
复制
const ControlPanel = (props) => {
    return (
      <div className="control_panel" id="control_panel">
        {props.children}
      </div>
    );
}

注意props.children是如何呈现的(而不是this.props.children,因为它是一个函数组件)。

票数 38
EN

Stack Overflow用户

发布于 2017-04-30 23:46:58

您可以通过道具访问嵌套元素。所以,在你的例子中,这样做:

代码语言:javascript
复制
const ControlPanel = (props) => {
  return (
    <div className="control_panel" id="control_panel">
      {props.children}
    </div>
  );
}
票数 4
EN

Stack Overflow用户

发布于 2017-04-30 23:47:26

您需要在ControlPanel中呈现孩子

代码语言:javascript
复制
const ControlPanel = ({ children }) => {
    return (
      <div className="control_panel" id="control_panel">
        {children}
      </div>
    );
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43712494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档