代码之家  ›  专栏  ›  技术社区  ›  sir-haver

ReactJS创建表的可滚动部分

  •  2
  • sir-haver  · 技术社区  · 6 年前

    为了使表的一部分可滚动,我在表内使用了一个DIV,但得到了警告:

    警告:validatedMemoring(…):<div>不能显示为<tbody>的子级

    我理解警告,但我希望表的一部分(大部分)可以滚动,从而限制表的一部分的最大高度:

    <div className="main-table">
                   <table className="main-edit-table" align="right">
                         <tbody>
                                <tr>
                                     <th>haveri</th>
                                 </tr>
                                  <div className="inst-container">
                                  {this.state.list && this.state.list.map((collection, key) => (
                                        <tr key={key}>
                                            <td>{key+1}</td>
                                            <td>
                                                <div className="main-item-container">
                                                    <span>{collection}</span>
                                                </div>
                                            </td>
                                            <td>{collection.subjects[0] && collection.subjects[0].name}</td>
                                        </tr>      
                                        ))}
                                        </div>
                                </tbody>
                            </table>
    
                        </div>
    

    CSS:

    .inst-container {
        border: 1px solid #eeccee;
        max-height: 300px;
        overflow-y: scroll;
        width: 100%;
    }
    

    我要做的就是在表的标题后面插入一个DIV,使表本身可以滚动。

    两个问题:

    1. 警告是“那么坏”吗?我的意思是,我得到了警告,但它工作得很好
    2. 您将如何创建标题(可以包含几列)和下面的可滚动表?使用网格系统是唯一的选择吗?
    1 回复  |  直到 6 年前
        1
  •  1
  •   MMH    6 年前

    我宁愿用溢出的DIV容器包装整个表,并将列标题设置为粘性位置。

    见下文:

    <div className="container">
        <table className="main-edit-table" align="right">
            <thead>
                <tr>
                    <th className="sticky-column">haveri</th>
                </tr>
            </thead>
            <tbody>
                    {this.state.list && this.state.list.map((collection, key) => (
                        <tr key={key}>
                            <td>{key+1}</td>
                             <td>
                                 <div className="main-item-container">
                                     <span>{collection}</span>
                                 </div>
                                 </td>
                                 <td>{collection.subjects[0] && 
                                 collection.subjects[0].name}</td>
                        </tr>      
                                    ))}
            </tbody>
        </table>
    </div>
    

    CSS:

    .sticky-column {
        position: -webkit-sticky; /* Safari */
        position: sticky;
        top: 0
    }
    
    .container {
        border: 1px solid #eeccee;
        max-height: 300px;
        overflow-y: scroll;
        width: 100%;
    }