在 Next.js 中使用 Antd 开窗会破坏工具提示和弹出窗口
Windowing with Antd in Next.js breaks tooltips and popovers
我正在 Next.js 中使用 Antd 试验窗口技术,我制作了这个简单的应用程序,其中包含 index.tsx 页面:
import { CSSProperties } from 'react'
import type { NextPage } from 'next'
import Head from 'next/head'
import Image from 'next/image'
import AutoSizer from 'react-virtualized-auto-sizer'
import { FixedSizeList as List } from 'react-window'
import { Card, Tooltip } from 'antd'
import data from '../data'
import styles from '../styles/Home.module.css'
const people = data();
const Row = ({ index, style }: { index: number, style?: CSSProperties }) => (
<div style={style}>
<Card bordered={true}>
<p>{people[index].name}</p>
<Tooltip title={`${Math.floor(people[index].age/15)} in dog years`}>
<p>{people[index].age}</p>
</Tooltip>
</Card>
</div>
)
const Home: NextPage = () => {
return (
<AutoSizer>
{({ height, width }) => (
<List
height={height}
itemCount={people.length}
itemSize={100}
width={width}
>
{Row}
</List>
)}
</AutoSizer>
)
}
export default Home
在 globals.css 中添加以下样式之前,FixedSizeList
将不起作用:
html, body, div {
height: 100%;
}
但是,当我这样做时,它破坏了 Antd 的 Tooltip
。通常发生的情况是,当我将鼠标悬停在相关元素上方时,工具提示会以 100% 的高度出现一瞬间,然后消失,并且无论我将鼠标悬停在哪里,它都不会再出现在页面上。
我该如何解决这个问题?
千辛万苦终于找到了解决办法
显然,Nextjs 用一个 div 和 id __next
包裹了整个布局。那是整个页面的 outer-most 容器,它的高度没有设置,所以由于 FixedSizeList
的内容被放置在常规页面流之外,所以 __next
div 的高度为 0。
不知道有没有更好的解决办法,我干脆在globals.css文件里加了这个小样式:
div#__next {
height: 100%;
}
这解决了问题,没有强制页面中的其他 div 高度为 100%(包括工具提示和弹出窗口)。
我正在 Next.js 中使用 Antd 试验窗口技术,我制作了这个简单的应用程序,其中包含 index.tsx 页面:
import { CSSProperties } from 'react'
import type { NextPage } from 'next'
import Head from 'next/head'
import Image from 'next/image'
import AutoSizer from 'react-virtualized-auto-sizer'
import { FixedSizeList as List } from 'react-window'
import { Card, Tooltip } from 'antd'
import data from '../data'
import styles from '../styles/Home.module.css'
const people = data();
const Row = ({ index, style }: { index: number, style?: CSSProperties }) => (
<div style={style}>
<Card bordered={true}>
<p>{people[index].name}</p>
<Tooltip title={`${Math.floor(people[index].age/15)} in dog years`}>
<p>{people[index].age}</p>
</Tooltip>
</Card>
</div>
)
const Home: NextPage = () => {
return (
<AutoSizer>
{({ height, width }) => (
<List
height={height}
itemCount={people.length}
itemSize={100}
width={width}
>
{Row}
</List>
)}
</AutoSizer>
)
}
export default Home
在 globals.css 中添加以下样式之前,FixedSizeList
将不起作用:
html, body, div {
height: 100%;
}
但是,当我这样做时,它破坏了 Antd 的 Tooltip
。通常发生的情况是,当我将鼠标悬停在相关元素上方时,工具提示会以 100% 的高度出现一瞬间,然后消失,并且无论我将鼠标悬停在哪里,它都不会再出现在页面上。
我该如何解决这个问题?
千辛万苦终于找到了解决办法
显然,Nextjs 用一个 div 和 id __next
包裹了整个布局。那是整个页面的 outer-most 容器,它的高度没有设置,所以由于 FixedSizeList
的内容被放置在常规页面流之外,所以 __next
div 的高度为 0。
不知道有没有更好的解决办法,我干脆在globals.css文件里加了这个小样式:
div#__next {
height: 100%;
}
这解决了问题,没有强制页面中的其他 div 高度为 100%(包括工具提示和弹出窗口)。