🕌

react-table でホバー時に別の内容を表示したい

2022/06/12に公開

やりたいこと

Youtube Studio のコンテンツのテーブルをホバーさせた時に、背景カラーと一緒に要素が変わるのをみて、面白そうだったので実装してみようと思いました。

実装

使用技術

コード

ホバー動作の検知

onMouseEnteronMouseLeave を使って、状態を変化させています。

// 略
const [selectedContentId, setSelectedContentId] = useState('');
// 略
<Tbody {...getTableBodyProps()}>
{page.map((row) => {
    prepareRow(row);
    return (
    <Tr
        {...row.getRowProps()}
        key={row.id}
        onMouseEnter={() => {
            setSelectedContentId(row.original.content_id);
        }}
        onMouseLeave={() => {
            setSelectedContentId('');
        }}
        backgroundColor={
            row.original.content_id === selectedContentId
                ? 'gray.100'
                : ''
        }
    >
        {row.cells.map((cell) => (
        <Td {...cell.getCellProps()} key={cell.getCellProps().key}>
            {cell.render('Cell')}
        </Td>
        ))}
    </Tr>
    );
})}
</Tbody>
ホバーかどうか判定・出し分け

カラム(Cell)ごとに、出し分ける分岐を書いています。

const columns: Column<Type>[] = useMemo(
    () => [
        {
            Header: 'title',
            accessor: 'title',
            Cell: (row) => {
                return (
                    {row.row.original.content_id === selectedContentId ?
                    // ホバーが当たった時の表示内容
                        <TableHoveredColumn/>
                    :
                    // ホバーが当たっていない時の表示内容
                        <TableColumn/>
                } 
// 略
GitHubで編集を提案

Discussion

ログインするとコメントできます