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

如何在将函数组件作为props传入时启用Hot Reload?

React组件作为props传入时热重载失效的解决方案

问题场景

将Child函数组件作为props传入Parent组件后,修改Child组件代码无法触发热重载,相关代码示例如下:

App.tsx

import "./styles.css";
import { Parent } from "./components/parent";
import { Child } from "./components/child";

export default function App() {
  return <Parent child={Child} />;
}

Parent.tsx

import * as React from "react";

export const Parent: React.FC<{ child: React.FC }> = ({ child }) => {
  return (
    <div>
      Hot Reload Works
      {child({})}
    </div>
  );
};

Child.tsx

import * as React from "react";

export const Child: React.FC = () => {
  return <div>Hot Reload Does Not Work</div>;
};

解决方案

问题出在Parent组件中直接调用child({})的渲染方式——这相当于执行普通函数,不会被React的热重载机制识别为组件实例。需要改为标准的组件渲染方式:

方法1:使用JSX语法渲染(推荐)

将props传入的组件重命名为大写开头的变量(符合JSX组件命名规范),然后用标签形式渲染:

import * as React from "react";

export const Parent: React.FC<{ child: React.FC }> = ({ child: ChildComponent }) => {
  return (
    <div>
      Hot Reload Works
      <ChildComponent />
    </div>
  );
};

方法2:使用React.createElement渲染

如果不想重命名变量,可以用React.createElement创建组件实例:

import * as React from "react";

export const Parent: React.FC<{ child: React.FC }> = ({ child }) => {
  return (
    <div>
      Hot Reload Works
      {React.createElement(child)}
    </div>
  );
};

原理说明

React的热重载机制依赖于对组件挂载、更新流程的追踪,只有通过JSX或React.createElement创建的组件实例,才会被React纳入组件生命周期管理,从而在代码变更时触发热重载。直接调用组件函数无法触发这一机制,因此热重载失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:25:17