@quid/react-use-controlled-state

React Hook to easily create fully controlled/uncontrolled React components.

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
@quid/react-use-controlled-state
4.0.03 years ago4 years agoMinified + gzip package size for @quid/react-use-controlled-state in KB

Readme

@quid/react-use-controlled-state is a custom React Hook designed to enable developers to easily create components able to work both as fully controlledcontrolled-components or fully uncontrolleduncontrolled-components without code repetition.

Installation

npm install --save @quid/react-use-controlled-state

# or

yarn add @quid/react-use-controlled-state

Usage example

Take this component as example:
```jsx static import useControlledState from '@quid/react-use-controlled-state';
const MyComponent = ({ defaultOpen, open, onChange }) => { const state, setState = useControlledState(defaultOpen, open, onChange);
return (
<button type="button" onClick={() => setState(current => !current)}>
  {state === true ? 'component is open' : 'component is closed'}
</button>
); };
Thanks to `@quid/react-use-controlled-state`, this component can be used in two
different ways now.

The first way let's you define a default open state, and let the component hold
and handle the state changes for you, transparently.

```jsx
import useControlledState from '@quid/react-use-controlled-state';

const MyComponent = ({ defaultOpen, open, onChange }) => {
  const [state, setState] = useControlledState(defaultOpen, open, onChange);

  return (
    <button type="button" onClick={() => setState(current => !current)}>
      {state === true ? 'component is open' : 'component is closed'}
    </button>
  );
};

<MyComponent defaultOpen={false} />;

The second way, makes you define a open property, along with an onChange callback.
You will be responsible to update the state and maintain it externally.
import useControlledState from '@quid/react-use-controlled-state';

const MyComponent = ({ defaultOpen, open, onChange }) => {
  const [state, setState] = useControlledState(defaultOpen, open, onChange);

  return (
    <button type="button" onClick={() => setState(current => !current)}>
      {state === true ? 'component is open' : 'component is closed'}
    </button>
  );
};

const App = () => {
  const [isOpen, setOpen] = React.useState(false);

  return <MyComponent open={isOpen} onChange={open => setOpen(open)} />;
};

<App />;

Both the approaches have their upsides and downsides, and it's useful to let your users decide what fits better their needs.

More documentation is available at https://ui.quid.com