NotionNext的Next主题源码阅读

公告:Announcement.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// themes/next/components/Announcement.js
import { useGlobal } from '@/lib/global'
import dynamic from 'next/dynamic'

const NotionPage = dynamic(() => import('@/components/NotionPage'))

const Announcement = ({ post, className }) => {
const { locale } = useGlobal()
if (!post) {
return <></>
}
return <>
<div className="text-sm pb-1 px-2 flex flex-nowrap justify-between">
<div className="font-light text-gray-600 dark:text-gray-200">
<i className="mr-2 fas fa-bullhorn" />{locale.COMMON.ANNOUNCEMENT}
</div>
</div>
{post && (<div id="announcement-content">
<NotionPage post={post} className='text-center ' />
</div>)}
</>
}
export default Announcement

这段代码是一个名为 Announcement 的 React 组件,它用于显示公告。这个组件接收两个属性:postclassName

首先,我们从 @/lib/global 导入了一个名为 useGlobal 的 React Hook。这个 Hook 可能用于获取全局状态,例如当前的语言环境。

然后,我们使用 next/dynamic 动态地导入了一个名为 NotionPage 的组件。动态导入是 Next.js 的一个特性,它允许你在需要的时候才加载组件,这可以提高应用的性能。

Announcement 组件中,我们首先使用 useGlobal Hook 获取了当前的语言环境。然后,如果 post 属性不存在(可能是 nullundefined),组件将返回一个空的 React 元素(<></>)。

如果 post 属性存在,组件将返回一个包含公告信息的 JSX 元素。这个元素包含一个带有公告图标和公告文本的 div,以及一个 NotionPage 组件,它可能用于显示公告的内容。

最后,我们导出了 Announcement 组件,使其可以在其他文件中被导入和使用。

文章的版权信息:ArticleCopyright

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import { useGlobal } from '@/lib/global'
import Link from 'next/link'
import CONFIG from '../config'
import { siteConfig } from '@/lib/config'

export default function ArticleCopyright ({ author, url }) {
const { locale } = useGlobal()
if (!siteConfig('NEXT_ARTICLE_COPYRIGHT', null, CONFIG)) {
return <></>
}
return (
<section className="dark:text-gray-300 mt-6">
<ul className="overflow-x-auto whitespace-nowrap text-sm dark:bg-gray-700 bg-gray-100 p-5 leading-8 border-l-2 border-blue-500">
<li>
<strong className='mr-2'>{locale.COMMON.AUTHOR}:</strong>
<Link href={'/about'} className="hover:underline">
{author}
</Link>
</li>
<li>
<strong className='mr-2'>{locale.COMMON.URL}:</strong>
<a className="hover:underline" href={url}>
{url}
</a>
</li>
<li>
<strong className='mr-2'>{locale.COMMON.COPYRIGHT}:</strong>
{locale.COMMON.COPYRIGHT_NOTICE}
</li>
</ul>
</section>
)
}

这段代码定义了一个名为 ArticleCopyright 的 React 组件,它用于显示文章的版权信息。这个组件接收两个属性:authorurl

首先,我们从 @/lib/global 导入了一个名为 useGlobal 的 React Hook。这个 Hook 可能用于获取全局状态,例如当前的语言环境。

然后,我们从 next/link 导入了 Link 组件,它用于创建 Next.js 应用中的链接。我们还从 ../config@/lib/config 导入了 CONFIGsiteConfig

ArticleCopyright 组件中,我们首先使用 useGlobal Hook 获取了当前的语言环境。然后,我们调用 siteConfig 函数检查是否启用了文章版权功能。如果没有启用,组件将返回一个空的 React 元素(<></>)。

如果启用了文章版权功能,组件将返回一个包含版权信息的 JSX 元素。这个元素包含一个 section,其中包含一个 ul 列表。列表中的每一项(li)分别显示了作者、URL 和版权声明。注意,作者的名字是一个 Link 组件,点击它将导航到 /about 页面。

最后,我们导出了 ArticleCopyright 组件,使其可以在其他文件中被导入和使用。

NotionNext的Next主题源码阅读

https://blog.jiejaitt.top/posts/77d2c149.html

作者

JIeJaitt

发布于

2024-02-16

更新于

2024-02-16

许可协议

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×