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

React嵌套自定义组件时Shelf未渲染内部Book子组件问题

问题根源

React组件标签内部嵌套的内容不会自动渲染,这些嵌套内容会被作为children属性传递给外层组件,必须由组件手动读取并插入到JSX结构中才会显示。
你当前的Shelf组件直接返回了没有任何子节点的空<div className="shelf-div"></div>,完全没有处理传入的children属性,因此嵌套在Shelf标签内的Book组件会被直接忽略,页面只会渲染空的书架样式。

修复方案

只需要修改Shelf.js代码,接收组件props并在书架容器内渲染props.children即可:

import React from 'react';
import '../css/shelf.css';

function Shelf(props) {
    return (
        <div className="shelf-div">
            {props.children}
        </div>
    );
}

export default Shelf;

修改完成后,你在Bookstore.js中写在<Shelf>和</Shelf>之间的所有元素都会被渲染到对应书架的容器内部:第一个嵌套了3个Book的Shelf会正常显示3本书,第二个没有嵌套内容的Shelf会保持空书架状态,完全满足不同书架配置不同书籍的需求,不需要把Book硬编码写死在Shelf组件里。

可选扩展

如果需要区分不同书籍,可以给Book组件传入自定义props实现,示例:

  • 修改Book组件接收props展示书籍信息
import React from 'react';
import '../css/book.css';

function Book(props) {
    return <div className="book-div">{props.bookName}</div>;
}

export default Book;
  • 在Bookstore中给不同书架配置不同书籍
import React from 'react';
import Book from './Book';
import Shelf from './Shelf';

function Bookstore() {
    return (
        <div>
            <Shelf>
                <Book bookName="React实战" />
                <Book bookName="JS高级程序设计" />
                <Book bookName="CSS权威指南" />
            </Shelf>
            <Shelf>
                <Book bookName="百年孤独" />
                <Book bookName="活着" />
            </Shelf>
        </div>
    );
}

export default Bookstore;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:24:17