You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

面试使用Codepen时React子组件未渲染,如何解决?

React子组件不渲染的问题解决办法

嘿,我懂你遇到的困扰了!在Codepen里写的React代码只显示了"hello",<Jack />组件完全没出来,其实就是两个小细节没处理对:

1. 用了过时的React渲染API

React从v0.14版本开始,就把DOM渲染相关的功能拆分到ReactDOM独立库中了,你写的React.render()是非常老旧的写法——在现在的React版本里根本不存在这个方法!这就导致组件渲染流程没走全:虽然<Application />里的文本能显示,但子组件<Jack />没被正确挂载。

2. 组件定义顺序(可选但更规范)

你先写了<Application />再定义<Jack />,虽然ES5环境下类声明会有变量提升不会报错,但把被依赖的子组件放在父组件前面,代码逻辑会更清晰,也能避免一些潜在的作用域问题。

修正后的完整代码

适配React 17及以下版本

首先在Codepen的设置里,确保同时引入React和ReactDOM(可以直接选Codepen自带的"React + ReactDOM"预设),然后替换代码为:

// 先定义子组件
class Jack extends React.Component {
  render() {
    return (
      <div> Goodbye </div>
    )
  }
}

class Application extends React.Component {
  render() {
    return <div> hello <Jack /> </div>
  }
}

// 改用ReactDOM的渲染方法
ReactDOM.render(<Application />, document.getElementById('app'));

适配React 18+版本

React 18推出了新的根APIcreateRoot,推荐用这个更现代的写法:

class Jack extends React.Component {
  render() {
    return (
      <div> Goodbye </div>
    )
  }
}

class Application extends React.Component {
  render() {
    return <div> hello <Jack /> </div>
  }
}

// 新的渲染方式
const root = ReactDOM.createRoot(document.getElementById('app'));
root.render(<Application />);

改完之后刷新Codepen,就能同时看到"hello"和"Goodbye"啦!

内容的提问来源于stack exchange,提问作者J Seabolt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:12:10