Nanananananananana.. Pat Man!

    react-headings
    TypeScript icon, indicating that this package has built-in type declarations

    3.0.12 • Public • Published

    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!

    Install

    npm i react-headings

    DownloadsWeekly Downloads

    97

    Version

    3.0.12

    License

    MIT

    Unpacked Size

    12.4 kB

    Total Files

    5

    Last publish

    Collaborators

    • alexnault