@expressive/react
Version:
Use classes to define state in React!
39 lines (36 loc) • 1.6 kB
TypeScript
export { Pragma } from './adapter';
import Model__default, { Context } from '@expressive/mvc';
export { Context, Model, Observable, Model as default, get, has, ref, set, use } from '@expressive/mvc';
import * as React from 'react';
import { ReactNode } from 'react';
export { Fragment, createElement } from 'react';
declare module '@expressive/mvc' {
namespace Context {
function use(create?: true): Context;
function use(create: boolean): Context | null | undefined;
}
}
declare namespace Consumer {
type Props<T extends Model__default> = {
/** Type of controller to fetch from context. */
for: Model__default.Type<T>;
/**
* Render function, will receive instance of desired controller.
*
* Called every render of parent component.
* Similar to `Model.get()`, updates to properties accessed in
* this function will cause a refresh when they change.
*/
children: (value: T) => ReactNode | void;
};
}
declare function Consumer<T extends Model__default>(props: Consumer.Props<T>): string | number | boolean | React.ReactElement<any, string | React.JSXElementConstructor<any>> | Iterable<ReactNode> | React.ReactPortal | null;
declare namespace Provider {
interface Props<T extends Model__default> {
for: Context.Accept<T>;
forEach?: Context.Expect<T>;
children?: ReactNode;
}
}
declare function Provider<T extends Model__default>(props: Provider.Props<T>): React.FunctionComponentElement<React.ProviderProps<Context>>;
export { Consumer, Provider };