Skip to content

Auto-increment your HTML headings (h1, h2, etc.) for improved accessibility and SEO.

License

Notifications You must be signed in to change notification settings

SoprisApps/react-headings

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

91 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

React Headings Logo

React Headings checks npm size

Never worry about using the wrong heading level (h1, h2, etc.) in complex React apps!

React-headings maintains the proper hierarchy of headings for improved accessibility and SEO, no matter the component structure, while you keep full control of what's rendered.

References:

Table of contents

Demos

Highlights

  • Flexible
  • Focused on developer experience
  • Fully tested
  • Typed with TypeScript
  • Works with component libraries (Material UI, etc.)
  • Supports server-side rendering
  • Under 1 kB minified & gzipped
  • Follows semantic versioning

Installation

npm install react-headings
# or
yarn add react-headings

Examples

Basic usage

import React from "react";
import { H, Section } from "react-headings";
import MyIcon from "./MyIcon";

function ParentComponent() {
  return (
    <Section
      component={
        <div>
          <MyIcon />
          <H>My hx</H>
        </div>
      }
    >
      <Section component={<H>My hx+1</H>}>
        <p>...</p>
      </Section>
      <Section component={<H>My hx+1</H>}>
        <ChildComponent />
      </Section>
    </Section>
  );
}

function ChildComponent() {
  return (
    <Section component={<H>My hx+2</H>}>
      <p>...</p>
    </Section>
  );
}

Custom component

You can render custom headings anywhere by using either the useLevel hook or the H component.

  • With the useLevel hook:
import React from "react";
import { useLevel } from "react-headings";

function App() {
  const { Component, level } = useLevel();

  return <Component>This is a h{level}</Component>;
}
  • With the H component:
import React from "react";
import { H } from "react-headings";

function App() {
  return (
    <H
      render={({ Component, level }) => (
        <Component>This is a h{level}</Component>
      )}
    />
  );
}

Using component librairies

Here's an example with Material UI:

import React from "react";
import { useLevel } from "react-headings";
import { Typography } from "@material-ui/core";

function MyHeading(props) {
  const { Component } = useLevel();

  return <Typography component={Component} {...props} />;
}

Leveraging Component and level from the context should make implementing other librairies pretty straightforward.

API

<H> component

Renders a <h1>, <h2>, <h3>, <h4>, <h5> or <h6> depending on the current level.

Props

Name Type Required Description
render function No Override with a custom heading. Has precedence over children.
children node No The content of the heading. Usually the title.

Any other props will be passed to the heading element.

Example

import React from "react";
import { H } from "react-headings";

function Example1() {
  return <H>This is my title</H>;
}

function Example2() {
  return (
    <H render={({ level, Component }) => <Component>My h{level}</Component>} />
  );
}

<Section> component

Creates a new section (a heading and its level).

Props

Name Type Required Description
component node Yes The heading component. Can be anything but best used in combination with <H>.
children node No The content of the new level.

Example

import React from "react";
import { Section, H } from "react-headings";

function Example1() {
  return (
    <Section component={<H>This is my title</H>}>This is my content</Section>
  );
}

function Example2() {
  return (
    <Section
      component={
        <div>
          <div>
            <H>This is my title</H>
          </div>
        </div>
      }
    >
      This is my content
    </Section>
  );
}

useLevel hook

Returns an object containing the current level and current Component.

Arguments

None

Returns

Name Type Description
level 1 | 2 | 3 | 4 | 5 | 6 The current level.
Component "h1" | "h2" | "h3" | "h4" | "h5" | "h6" The current component. Same as level.

Example

import React from "react";
import { useLevel } from "react-headings";

function Example(props) {
  const { level, Component } = useLevel();

  return <Component {...props}>This is a h{level}</Component>;
}

Changelog

For a list of changes and releases, see the changelog.

Contributing

Found a bug, have a question or looking to improve react-headings? Open an issue, start a discussion or submit a PR!

About

Auto-increment your HTML headings (h1, h2, etc.) for improved accessibility and SEO.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 95.0%
  • JavaScript 5.0%