本项目实现了一个美观、实用的通讯录页面,采用 React 框架,结合 Ant Design 组件库与 TailwindCSS 原子化样式,支持按字母分组展示联系人,并提供便捷的字母索引导航。页面设计现代,交互流畅,适用于各类需要联系人管理的 Web 应用。
import { useRef } from "react";
import { Anchor } from "antd";
import "antd/dist/reset.css";
// 示例数据
const contacts = [
{ name: "Alice", initial: "A" },
{ name: "Aaron", initial: "A" },
{ name: "Bob", initial: "B" },
{ name: "Bella", initial: "B" },
{ name: "Cindy", initial: "C" },
{ name: "David", initial: "D" },
{ name: "Eve", initial: "E" },
{ name: "Frank", initial: "F" },
{ name: "Grace", initial: "G" },
{ name: "Helen", initial: "H" },
{ name: "Ivy", initial: "I" },
{ name: "Jack", initial: "J" },
{ name: "Kathy", initial: "K" },
{ name: "Leo", initial: "L" },
{ name: "Mona", initial: "M" },
{ name: "Nina", initial: "N" },
{ name: "Oscar", initial: "O" },
{ name: "Paul", initial: "P" },
{ name: "Queen", initial: "Q" },
{ name: "Rose", initial: "R" },
{ name: "Sam", initial: "S" },
{ name: "Tom", initial: "T" },
{ name: "Uma", initial: "U" },
{ name: "Vera", initial: "V" },
{ name: "Will", initial: "W" },
{ name: "Xander", initial: "X" },
{ name: "Yuki", initial: "Y" },
{ name: "Zack", initial: "Z" },
];
// 分组
const grouped = contacts.reduce((acc, cur) => {
acc[cur.initial] = acc[cur.initial] || [];
acc[cur.initial].push(cur);
return acc;
}, {});
const letters = Array.from({ length: 26 }, (_, i) =>
String.fromCharCode(65 + i)
);
export default function ContactsAntd() {
const listRef = useRef();
// 生成Anchor的items
const anchorItems = letters
.filter((letter) => grouped[letter])
.map((letter) => ({
key: letter,
href: `#${letter}`,
title: letter,
}));
return (
<>
{/* 覆盖Antd Anchor字母索引栏padding-inline的全局样式 */}
{/* 通讯录列表 */}
通讯录
{letters.map(
(letter) =>
grouped[letter] && (
{letter}
{grouped[letter].map((c) => (
{c.name[0]}
{c.name}
))}
)
)}
{/* 右侧字母索引栏(Antd Anchor) */}
listRef.current}
affix={false}
showInkInFixed={true}
style={{ background: "transparent" }}
/>
>
);
}
Anchor 锚点实现,如果通讯录组件使用在弹框组件内,点击锚点时,滚动条会出现异常,需要使用 getContainer
属性,指定锚点滚动容器,否则会默认滚动到页面顶部。
react+antd Anchor(锚点组件)通讯录字母索引实现 - 高质量源码分享平台-免费下载各类网站源码与模板及前沿动态资讯