/ld-react-feature-flags

Integrate Launch Darkly in your React app in a breeze

Primary LanguageJavaScriptMIT LicenseMIT

ld-react-feature-flags

Build Status NPM code style: prettier

Integrate Launch Darkly in your React app in a breeze

Install

This project requires React 16.3.0 or later.

To use ld-react-feature-flags with your React app, install it as a dependency:

npm install @lectra/ld-react-feature-flags

Getting Started

FlagsProvider

Wrap your root component with FlagsProvider to make LaunchDarkly client instance accessible to all children components thanks to React context.

import { FlagsProvider } from '@lectra/ld-react-feature-flags';

ReactDOM.render(
  <FlagsProvider user={user} clientkey="myClientKey" loadingComponent ={<div>please wait</div>}>
    <App />
  </FlagsProvider>,
  document.getElementById('root')
);
Prop Type Required Description
user Object true User information
clientkey String true Your LaunchDarkly secret key
onFlagsChange function false Handler for flag change
loadingComponent Component false Loading component / string

Flags

All Flags components get the ldClient instance thanks to the FlagsProvider component.

To render a node or a component based on your flags, you must pass a flag props.

The Flags component will ask to LaunchDarkly if the given flag is active or not, depending on you LaunchDarkly settings.

You have the control on what will be rendered:

  • If the flag is active, you can wrapped the desired component to render as children to a Flag component or use a renderOn props.

  • If the flag isn't active, nothing will be rendered unless you pass a component as fallback by the fallbackRender props.

Prop Type Required Description
flag String true The flag to check
children Element/Component false Return the component if the flag given by props is active
renderOn Function false Return the given component if the flag is active
fallbackRender Function false Return the given component if the flag is inactive

with children props

import { Flags } from '@lectra/ld-react-feature-flags';

<Flags
  flag="beta-only"
>
  <h4>for beta users</h4>
</Flags>

with renderOn props

import { Flags } from '@lectra/ld-react-feature-flags';

<Flags
  flag="beta-only"
  renderOn={flag => <h4>for beta users</h4>}
/>

with renderOn props and fallbackRender props as fallback

import { Flags } from '@lectra/ld-react-feature-flags';

<Flags
  flag="beta-only"
  renderOn={flag => <h4>for beta users</h4>}
  fallbackRender={flag => (
    <h4>for regular users</h4>
  )}
/>

with multivariant flag

The flag given by props is a multivariant flag. See the LaunchDarkly doc for more details.

If the flag is active, LD won't return a boolean value but instead a custom value. In our case a string that represents a color. We can use it directly to style our h1 title.

import { Flags } from '@lectra/ld-react-feature-flags';

<Flags
  flag="header-bg-color"
  renderOn={flag => {
    return (
      <h1 style={{ color: flag.headerBgColor }}>
        My awesome multivariant flag
      </h1>
    );
  }}
/>

WithFlags

Same as Flags components but in a Higher Order Component way.

WithFlags([flag])([ComponentToRenderIfTrue][ComponentToRenderIfFalse])

Arguments Type Required Description
flag String true The flag to check
ComponentToRenderIfTrue React Component true The React component to render if the flag is true or is a multivariant flag
ComponentToRenderIfFalse React Component false The React component to render if the flag is false

Component render based on flag value

import { WithFlags } from '@lectra/ld-react-feature-flags';

const HBeta = () => <h4>for beta users</h4>;
const HeaderFeatureFlipped = WithFlags("beta-only")(HBeta)

<HeaderFeatureFlipped></HeaderFeatureFlipped>

Component render toggled on flag value

import { WithFlags } from '@lectra/ld-react-feature-flags';

const HBeta = () => <h4>for beta users</h4>;
const HStandard = () => <h4>for standard users</h4>;
const HeaderFeatureFlipped = WithFlags("beta-only")(HBeta, HStandard)

<HeaderFeatureFlipped></HeaderFeatureFlipped>

Component render with multivariant flag

import { WithFlags } from '@lectra/ld-react-feature-flags';

const HeaderWithColor = ({headerBgColor}) => (
    <h1 style={{ color: headerBgColor }}>
        My awesome multivariant flag
    </h1>);
const HeaderFeatureFlippedWithColor = WithFlags("header-bg-color")(HeaderWithColor)

<HeaderFeatureFlippedWithColor></HeaderFeatureFlippedWithColor>

Example

This project contains some examples that you could run.

git clone https://github.com/lectra-tech/ld-react-feature-flags.git
cd ld-react-feature-flags/example
npm install
npm start

License

MIT