当前位置: 首页 > 面试题库 >

为什么我的嵌套React组件不渲染?

冯翔
2023-03-14
问题内容

我的React组件有问题。我组件的嵌套子代ControlPanel似乎没有渲染。这是我的代码:

class App extends Component {
  render() {
    return (
      <div className="App">
        <ControlPanel>
          <CustomerDisplay />
        </ControlPanel>
      </div>
    );
  }
}

我在此文件的顶部有以下两行:

import ControlPanel from './components/control_panel';

import CustomerDisplay from './components/customer_display';

这是我的ControlPanel组件:

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(在ControlPanelindex.jsx文件中)

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


问题答案:

要允许组件包含子项并正确渲染它们,必须使用this.props.children。这是传递到所有组件与孩子为道具,包含组件的孩子,通过解释的阵营文档:

遏制

有些组件不提前知道他们的孩子。这对于像SidebarDialog代表通用“框”的组件尤为常见。

我们建议此类组件 使用特殊children道具将子元素直接传递到它们的输出中

function FancyBorder(props) {
    return (
      <div className={'FancyBorder FancyBorder-' + props.color}>
        {props.children}
      </div>
    );
}

这使其他组件可以通过嵌套JSX将任意子级传递给它们

function WelcomeDialog() {
    return (
      <FancyBorder color="blue">
        <h1 className="Dialog-title">
          Welcome
        </h1>
        <p className="Dialog-message">
          Thank you for visiting our spacecraft!
        </p>
      </FancyBorder>
    );
}

如文档中所述,某些组件无法提前知道其子级-
它们可能是通用包装或内容盒,它们是您ControlPanel所需要的。因此,要渲染组件的子代,必须children在父代的render方法中显式渲染prop中的子代。因此,将它像这样应用于您的代码:

const ControlPanel = (props) => {
    return (
      <div className="control_panel" id="control_panel">
        {props.children}
      </div>
    );
}

注意如何props.children渲染(不是this.props.children因为它是一个功能组件)。



 类似资料:
  • 问题内容: 在世界上如何在react-router中使用嵌套路由,特别是版本4.x?以下在以前的版本中效果很好… 升级到4.x会引发以下警告… 警告:您不应在同一路径中使用 组件和 ;<路由子代>将被忽略 这到底是怎么回事?我已经搜索了几个小时的文档,但无法成功使嵌套路由正常工作。如何使用 组件 将其路由嵌套在react-router v4中?我的简单示例如何转换为v4.x API遵从性以嵌套路由

  • 问题内容: 我有一个带有以下渲染的组件: policyLegend是一个对象数组,每个对象内都有一个“值”数组。 构建应用程序时,我没有收到任何错误,但是在组件页面上没有任何显示。我不确定我要去哪里错,请多多指教,谢谢。 问题答案: 这是因为您没有在policyLegend映射内返回任何内容。试试这个:

  • 问题内容: 我映射了多个对象。 我如何嵌套一个循环,以便首先遍历对象,然后遍历(在此示例中)城市?谢谢! 我的没有嵌套外观的渲染函数如下所示: 城市对象示例: 问题答案: 您可以使用嵌套映射来映射内部子对象以及

  • 我有一个组件,我设置了一个计数,让状态更新时,按钮点击。但是当我检查渲染时间时,每次我点击按钮它都会渲染两次。 https://codesandbox.io/s/brave-forest-yre6y?file=/src/App.js 我想知道: 为什么它是这样工作的

  • 本文向大家介绍React中嵌套组件与被嵌套组件的通信过程,包括了React中嵌套组件与被嵌套组件的通信过程的使用技巧和注意事项,需要的朋友参考一下 前言 在React项目的开发中经常会遇到这样一个场景:嵌套组件与被嵌套组件的通信。 比如Tab组件啊,或者下拉框组件。 场景 这里应用一个最简单的Tab组件来呈现这个场景。 这里有Tab,TabItem和Area三个组件,其中Tab为嵌套组件,TabI

  • 我遇到了这个简单的React函数组件,它渲染四次,而我希望它最初渲染一次,执行useffect更新状态,然后再次渲染。相反,控制台发送4个日志输出,表示它渲染了4次。了解react功能组件的基本生命周期的原因和资源吗? https://codesandbox.io/s/solitary-tree-t120d?file=/src/App.js:149-191