Skip to content

Super small component to custom render your hashtag within your text

Notifications You must be signed in to change notification settings

cristianbote/react-hashtag

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

React Hashtag

Enhance your strings with live hashtag components.

npm version codecov.io Code Coverage Build Status gzip size

Features:

  • Super small ~430 B
  • Available for React and Preact
  • Custom renderer for each hashtag
  • Custom 'click' handler for each hashtag
  • Generic output
  • Drop-in and use it. Your code will not have to adapt to anything.

Demo

React: https://codesandbox.io/s/qxow0z7v49

Preact: https://codesandbox.io/s/qv8qz89ll9

Quick example

// Your typical 'component'
const Card = () => (
    <p>
        Here goes my card contents with #static text inside
    </p>
);

// Will become
import ReactHashtag from "react-hashtag";

const Card = () => (
    <p>
        <ReactHashtag>
            Here goes my card contents with #static text inside
        </ReactHashtag>
    </p>
);

Install

The usual flow

npm install react-hashtag --save

Api

The component ReactHashtag is actually pretty generic. Is not something that someone can't do in half an hour. But, this one has some generic API that could make you turn.

Name Type Description
renderHashtag(value: String, onClick: Function) function Returns the custom element to be renderer instead of a <span>. You can go wild here.
onHashtagClick(value: String, e: Event) function The click handler for each hashtags. This will be called with the hashtag value that got clicked.

Examples

Custom renderer

const Card = (props) => (
    <p>
        <ReactHashtag
            renderHashtag={(hashtagValue) => (
                <div className="hashtag">{hashtagValue}</div>
            )}
        >
            {props.children}
        </ReactHashtag>
    </p>
);

With styled components

const Hashtag = styled.span`
    color: tomato;
`;

const Card = (props) => (
    <p>
        <ReactHashtag
            renderHashtag={(hashtagValue) => (
                <Hashtag>{hashtagValue}</Hashtag>
            )}
        >
            {props.children}
        </ReactHashtag>
    </p>
);

Reusable or composition

You could reuse the same definition, if that's something you're looking for. The following example uses the anchor and defines a component that will redirect to certain hashtag pages.

const StyledHashtag = styled.a`
    color: tomato;
`;

/**
* Custom component to render the hashtags with a custom renderer
*/
const Hashtags = (props) => (
    <ReactHashtag
        renderHashtag={(hashtagValue) => (
            <StyledHashtag
                href={`/search/${hashtagValue}`}
            >
                {hashtagValue}
            </StyledHashtag>
        )}
    >
        {props.children}
    </ReactHashtag>
);

const Card = (props) => (
    <p>
        <Hashtags>
            {props.children}
        </Hashtags>
    </p>
);

Questions?

Feel free to file an issue if you have any questions.

About

Super small component to custom render your hashtag within your text

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published