When building modern SharePoint Framework (SPFx) solutions, developers often need a way to organize content in a structured yet user-friendly manner. Long pages of information can overwhelm users, and this is where an accordion control becomes highly valuable.
An accordion allows you to expand and collapse sections of content, making it easier to present large amounts of data in a compact format. It is frequently used in FAQs, forms, dashboards, and settings pages.
In this article, we will explore how to implement an accordion control in SPFx using three popular React libraries:
Fluent UI (Microsoft’s official UI library)
PnP SPFx Controls
Mantine (a modern React component library)
Why Use Accordion in SPFx?
Improved readability: Breaks down content into digestible sections.
Better user experience: Reduces scrolling and clutter.
Reusable patterns: Make forms, FAQs, and dashboards look professional.
Flexibility: Each library offers different styling and customization options.
Option 1. Accordion with Fluent UI
Fluent UI is Microsoft’s React-based library and is widely used in SPFx solutions.
Installation
Fluent UI is already included in SPFx projects, but you can update to the latest version if required:
npm install @fluentui/reactExample Code
import * as React from "react";
import { Accordion, AccordionItem, AccordionHeader, AccordionPanel } from "@fluentui/react-components";
export const FluentAccordion: React.FC = () => {
return (
<Accordion>
<AccordionItem value="1">
<AccordionHeader>General Information</AccordionHeader>
<AccordionPanel>Details about general information go here.</AccordionPanel>
</AccordionItem>
<AccordionItem value="2">
<AccordionHeader>Additional Details</AccordionHeader>
<AccordionPanel>Here are some additional details.</AccordionPanel>
</AccordionItem>
<AccordionItem value="3">
<AccordionHeader>Attachments</AccordionHeader>
<AccordionPanel>Users can upload or view files here.</AccordionPanel>
</AccordionItem>
</Accordion>
);
};Option 2. Accordion with PnP Controls
While the PnP SPFx React Controls package does not have a dedicated “Accordion” control, you can achieve accordion-like behavior using its Collapsible or ListView controls combined with expand/collapse logic.
Installation
npm install @pnp/spfx-controls-react --saveExample Code
import * as React from "react";
import { Accordion } from "@pnp/spfx-controls-react/lib/Accordion";
export const PnPAccordion: React.FC = () => {
return (
<Accordion
title="General Information"
defaultCollapsed={false}
>
<p>Details about general information go here.</p>
</Accordion>
);
};
Join the conversation! Your thoughts help the community grow.