reactjs创建表的一部分可滚动

时间:2019-02-04 04:23:42

标签: css reactjs html-table

要使表的一部分可滚动,我在表内部使用了div,但收到警告:

  

警告:validateDOMNesting(...):

不能作为的子代出现

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

<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 个答案:

答案 0 :(得分:1)

我宁愿用溢出将整个表包装在一个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%;
}