Giter VIP home page Giter VIP logo

react-ff's Introduction

React Feature Flag

Welcome to React Feature Flag ๐Ÿ‘‹

Version Documentation Maintenance License: MIT Twitter: fdaciuk

Type safe Components to create Feature Flags (or Feature Toggle) with React.js

Install

yarn add @fdaciuk/react-ff

Usage

First of all, we have to create our componentes using createFeatureFlag function. Create a new file (e.g. src/feature-flag.tsx) with this content:

import { createFeatureFlag } from '@fdaciuk/react-ff'

export type Flags = 
  | 'NEW_HEADER'
  | 'NEW_FOOTER'

const { FF, FFProvider } = createFeatureFlag<Flags>()
export { FF, FFProvider }

Now, on top of your app, import FFProvider from src/feature-flag.tsx, and pass all the flags your app will use, following the shape:

const flags = {
  NEW_HEADER: true,
  NEW_FOOTER: false,
}

In the above example, the user has access to something that should be rendered by the flag NEW_HEADER, but not by the flag NEW_FOOTER.

Usage of FFProvider:

function App () {
  const flags = {
    NEW_HEADER: true,
    NEW_FOOTER: false,
  }

  return (
    <FFProvider flags={flags}>
      <TheRestOfMyApp />
    </FFProvider>
  )
}

Now, anywhere on your app, you can use the FF component to make the feature flag (or feature toggle):

function TheRestOfMyApp () {
  return (
    <>
      <FF flag='NEW_HEADER' feature={<NewHeader />}>
        <OldHeader />
      </FF>

      <FF flag='NEW_FOOTER' feature={<NewFooter />} />
    </>
  )
}

function NewHeader () {
  return (
    <header>New header</header>
  )
}

function OldHeader () {
  return (
    <header>Old header</header>
  )
}

function NewFooter () {
  return (
    <footer>New footer</footer>
  )
}

The flag prop is type safe, and will only accept flags from type Flags, passed for createFeatureFlag function.

The children is optional. You can pass a children when you want to render a fallback component, whether flag is disabled (false).

Author

๐Ÿ‘ค Fernando Daciuk - @fdaciuk

Credits

Logo by @vmarcosp โ™ฅ๏ธ

๐Ÿค Contributing

Contributions, issues and feature requests are welcome!
Feel free to check issues page. You can also take a look at the contributing guide.

Show your support

Give a โญ๏ธ if this project helped you!

๐Ÿ“ License

Copyright ยฉ 2021 Fernando Daciuk - @fdaciuk.
This project is MIT licensed.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.