Reakit System utils
> This is experimental and may have breaking changes in minor versions.
npm:
``sh`
npm i reakit-system
Yarn:
`sh`
yarn add reakit-system
`jsx
import { useRole } from "reakit/Role";
import { createHook } from "reakit-system";
const useA = createHook({ name: "A", compose: useRole });
`
#### Table of Contents
- createComponent
- createHook
- mergeSystem
- SystemProvider
- useCreateElement
- useOptions
- useProps
- useToken
Creates a React component.
#### Parameters
- options Options<T, O> options.as
- options.useHook
- options.memo
- options.propsAreEqual
- (optional, default useHook?.unstable_propsAreEqual)options.keys
- (optional, default useHook?.__keys||[])options.useCreateElement
- (optional, default defaultUseCreateElement)
#### Examples
`javascript
import { createComponent } from "reakit-system";
const A = createComponent({ as: "a" });
`
Creates a React custom hook that will return component props.
#### Parameters
- options CreateHookOptions<O, P>
#### Examples
`javascript
import { createHook } from "reakit-system";
const useA = createHook({
name: "A",
keys: ["url"], // custom props/options keys
useProps(options, htmlProps) {
return {
...htmlProps,
href: options.url,
};
},
});
function A({ url, ...htmlProps }) {
const props = useA({ url }, htmlProps);
return ;
}
`
Merges multiple system objects into a single system object.
#### Parameters
- systems ...T
#### Examples
`javascript
import { Provider } from "reakit";
import { mergeSystem } from "reakit-system";
import * as bootstrapSystem from "reakit-system-bootstrap";
const mySystem = {
useButtonProps() {},
};
const system = mergeSystem(bootstrapSystem, mySystem);
function App() {
return (
App
);
}
`
Provider component that is used by reakit's Provider underneath.
#### Parameters
- props SystemProviderProps props.children
- props.unstable_system
-
#### Examples
`javascript
// instead of using
import { Provider } from "reakit";
// you can use this
import { SystemProvider } from "reakit-system";
// reakit's Provider has more features, such as ID generation
import * as system from "reakit-system-bootstrap";
function App() {
return (
App
);
}
`
Custom hook that will call children if it's a function. IfuseCreateElement has been passed to the context, it'll be used instead.
#### Parameters
- type T props
- Record<string, any> children
- React.ReactNode (optional, default props.children)
#### Examples
`javascript
import React from "react";
import { SystemProvider, useCreateElement } from "reakit-system";
const system = {
useCreateElement(type, props, children = props.children) {
// very similar to what useCreateElement does already
if (typeof children === "function") {
const { children: _, ...rest } = props;
return children(rest);
}
return React.createElement(type, props, children);
},
};
function Component(props) {
return useCreateElement("div", props);
}
function App() {
return (
);
}
`
Returns JSX.Element
React custom hook that returns the options returned by a given
use${name}Options in the SystemContext.
#### Parameters
- name string options
- T (optional, default {}as T)htmlProps
- any (optional, default {})
#### Examples
`javascript
import React from "react";
import { SystemProvider, useOptions } from "reakit-system";
const system = {
useAOptions(options, htmlProps) {
return {
...options,
url: htmlProps.href,
};
},
};
function A({ url, ...htmlProps }) {
const options = useOptions("A", { url }, htmlProps);
return ;
}
function App() {
return (
It will convert href into url in useAOptions and then url into href in A
);
}
`
Returns T
React custom hook that returns the props returned by a given
use${name}Props in the SystemContext.
#### Parameters
- name string options
- Record<string, any> (optional, default {})htmlProps
- any (optional, default {})
#### Examples
`javascript
import { SystemProvider, useProps } from "reakit-system";
const system = {
useAProps(options, htmlProps) {
return {
...htmlProps,
href: options.url,
};
},
};
function A({ url, ...htmlProps }) {
const props = useProps("A", { url }, htmlProps);
return ;
}
function App() {
return (
It will convert url into href in useAProps
);
}
`
Returns any
React custom hook that returns the value of any token defined in the
SystemContext. It's mainly used internally in useOptions
and useProps.
#### Parameters
- token string defaultValue
- T?
#### Examples
`javascript
import { SystemProvider, useToken } from "reakit-system";
const system = {
token: "value",
};
function Component(props) {
const token = useToken("token", "default value");
return
function App() {
return (
);
}
``
Returns T
MIT © Diego Haz