Honeycomb

use-controllable-state

Since: ver.7.6.0 Creates a controllable state. E.g: components that have internal state management that could be overwritten by external props.

Props

Prop nameTypeDefaultDescription
stateT | undefined

The state value to control the component. If provided, the component will not manage its own state.

defaultStateT | undefined

The default state value to use when the component is not controlled.

When the state is provided, only allows setting the state value from outside of the component.

Otherwise, the hook creates a new state with working setState function.

E.g.: ChoiceWrapper selected state, Tooltip active state and others.

import { Button, ButtonGroup, useControllableState } from '@flixbus/honeycomb-react';

function ControlledButton({ appearance, defaultAppearance, onClick }) {
  const [state, setState] = useControllableState({
    state: appearance,
    defaultState: defaultAppearance,
  });

  const toggle = () => {
    setState((prevState) => prevState === 'primary' ? 'secondary' : 'primary');

    if (onClick) {
      onClick();
    }
  };

  return <Button appearance={state} onClick={toggle}>{state}</Button>;
}

const [externalState, setExternalState] = React.useState('primary');

const externalToggle = () => setExternalState(externalState === 'primary' ? 'danger' : 'primary');

<>
  <ButtonGroup>
    <ControlledButton defaultAppearance="primary" />
    <ControlledButton appearance="primary" />
    <ControlledButton appearance={externalState} onClick={externalToggle} />
  </ButtonGroup>
</>