1.0.3 • Published 4 months ago

react-hook-showmore v1.0.3

Weekly downloads
-
License
ISC
Repository
-
Last release
4 months ago

🌟 react-hook-showmore

react-hook-showmore react-hook-showmore is a custom React Hook that allows you to display text of limited length and provides a "Show More" button option to expand the text. This hook can be used multiple times in a single component with different keys, perfect for displaying multiple texts that can be expanded independently.

🔧 Feature

  • Support Multiple Texts in One Component – Each text can have its own expansion status with a unique key.
  • Toggle Expand/Collapse – Allows the user to expand or hide the text back.
  • Lightweight & Performance – Built without additional dependencies.
  • Easy to use – With just a few lines of code.

📦 Installation

npm install react-hook-showmore

pnpm install react-hook-showmore

yarn add react-hook-showmore

🚀 Basic Usage

import React from "react";
import { useShowMore } from "react-hook-showmore";

const ExampleComponent = () => {
  const { isExpanded, toggleExpansion, getDisplayText } = useShowMore();

  const content =
    "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.";

  return (
    <div>
      <p>
        {getDisplayText("desc", content, 50)}
        {content.lenght > 50 && (
          <button type="button" onClick={() => toggleExpansion("desc")}>
            {isExpanded["desc"] ? "Show Less" : "Show More"}
          </button>
        )}
      </p>
    </div>
  );
};

export default ExampleComponent;

🚀 Multiple Usage

import React from "react";
import { useShowMore } from "react-hook-showmore";

const ExampleComponent = () => {
  const { isExpanded, toggleExpansion, getDisplayText } = useShowMore();

  const items = [
    {
      key: "item1",
      text: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy.",
    },
    {
      key: "item2",
      text: "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum.",
    },
    {
      key: "item3",
      text: "There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour.",
    },
  ];

  return (
    <div>
      {items.map(({ key, text }) => (
        <div key={key} style={{ marginBottom: "10px" }}>
          <p>
            {getDisplayText(key, text, 50)}
            {text.lenght > 50 && (
              <button type="button" onClick={() => toggleExpansion(key)}>
                {isExpanded[key] ? "Show Less" : "Show More"}
              </button>
            )}
          </p>
        </div>
      ))}
    </div>
  );
};

export default ExampleComponent;

📚 API Reference

🔹 useShowMore()

useShowMore() return 3 main properties:

PropertyTypeDescription
isExpandedRecord<string, boolean>An object that stores the expansion status based on a unique key.
toggleExpansion(key: string) => voidFunction to change expansion status based on certain key.
getDisplayText(key: string, content: string, length?: number) => stringFunction to get truncated text if it has not been expanded.

📌 Parameter Explanation getDisplayText

ParameterTypeDescription
keystringKey unique which is used to store the expansion status of a particular text. For example, if there are multiple texts in a single component, each text should have a different key.
contentstringText which you want to display with the "Show More" option.
length (opsional)numberMaximum length of text before truncation. Default: 100. If text is shorter than length, it will be displayed in full.

🎗️ Support

If this library is useful to you, please consider supporting me by buying a coffee!☕

Buy Me A Coffee

1.0.3

4 months ago

1.0.2

4 months ago

1.0.1

4 months ago

1.0.0

4 months ago