Integrate Launch Darkly in your React app in a breeze
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
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 |
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 |
import { Flags } from '@lectra/ld-react-feature-flags';
<Flags
flag="beta-only"
>
<h4>for beta users</h4>
</Flags>
import { Flags } from '@lectra/ld-react-feature-flags';
<Flags
flag="beta-only"
renderOn={flag => <h4>for beta users</h4>}
/>
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>
)}
/>
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>
);
}}
/>
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 |
import { WithFlags } from '@lectra/ld-react-feature-flags';
const HBeta = () => <h4>for beta users</h4>;
const HeaderFeatureFlipped = WithFlags("beta-only")(HBeta)
<HeaderFeatureFlipped></HeaderFeatureFlipped>
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>
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>
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
MIT