1.0.1 • Published 4 months ago
@slavikme/use-feature-flag v1.0.1
useFeatureFlag
React Hook
A simple React hook for managing client-side feature flags using localStorage.
Installation
npm install @slavikme/use-feature-flag
# or
yarn add @slavikme/use-feature-flag
# or
pnpm add @slavikme/use-feature-flag
Usage
import useFeatureFlag from "@slavikme/use-feature-flag";
function MyComponent() {
const [isEnabled, setEnabled] = useFeatureFlag("my-feature");
return (
<div>
{isEnabled && <NewFeature />}
<button onClick={() => setEnabled(!isEnabled)}>Toggle Feature</button>
</div>
);
}
API
Function Signature
useFeatureFlag(
flagName: string,
initValue?: boolean,
options?: FeatureFlagOptions
): [boolean, (value: boolean) => void]
or
useFeatureFlag(
flagName: string,
options?: FeatureFlagOptions
): [boolean, (value: boolean) => void]
Parameters
flagName
(string): The name of the feature flaginitValue
(boolean, optional): Initial valueoptions
(FeatureFlagOptions, optional): Configuration options
Options
type FeatureFlagOptions = {
/** Prefix for the localStorage key. Defaults to "FF_" */
prefix?: string;
/** Whether to store the initial value in localStorage on first mount. Defaults to true */
storeOnInit?: boolean;
};
Returns
A tuple containing:
- Current flag value (boolean)
- Setter function to update the flag value
Examples
Basic Usage
const [isEnabled, setEnabled] = useFeatureFlag("new-feature");
With Initial Value
const [isEnabled, setEnabled] = useFeatureFlag("new-feature", true);
With Options
const [isEnabled, setEnabled] = useFeatureFlag("new-feature", {
prefix: "FEATURE_",
storeOnInit: false,
});
With Initial Value and Options
const [isEnabled, setEnabled] = useFeatureFlag("new-feature", true, {
prefix: "FEATURE_",
storeOnInit: true,
});
Features
- 🔄 Persistent storage using localStorage
- ⚡️ TypeScript support
- 🎯 Simple API
- 🔧 Configurable prefix for localStorage keys
- 🚫 Option to disable automatic storage on initialization
Important Notes
Manual Flag Management
The feature flag can be manually changed from the browser's DevTools:
- Open DevTools (F12 or right-click -> Inspect)
- Go to Application -> Local Storage
- Find the flag using the configured prefix (default: "FF_")
- Change the value to "true" or "false"
- The change will take effect immediately in the application
Default Storage Behavior
By default, the hook creates a record in localStorage with a false
value on first mount. This makes it easier to manage flags in the client and provides a consistent initial state. You can modify this behavior using the storeOnInit
option in the configuration for various reasons:
- Hide feature flags from users in DevTools
- Prevent accidental flag exposure during development
- Control when flags become visible to end users
// Disable automatic storage on initialization
const [isEnabled, setEnabled] = useFeatureFlag("new-feature", {
storeOnInit: false,
});