123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649 |
- // Type definitions for react-redux 7.1
- // Project: https://github.com/reduxjs/react-redux
- // Definitions by: Qubo <https://github.com/tkqubo>,
- // Kenzie Togami <https://github.com/kenzierocks>,
- // Curits Layne <https://github.com/clayne11>
- // Frank Tan <https://github.com/tansongyang>
- // Nicholas Boll <https://github.com/nicholasboll>
- // Dibyo Majumdar <https://github.com/mdibyo>
- // Thomas Charlat <https://github.com/kallikrein>
- // Valentin Descamps <https://github.com/val1984>
- // Johann Rakotoharisoa <https://github.com/jrakotoharisoa>
- // Anatoli Papirovski <https://github.com/apapirovski>
- // Boris Sergeyev <https://github.com/surgeboris>
- // Søren Bruus Frank <https://github.com/soerenbf>
- // Jonathan Ziller <https://github.com/mrwolfz>
- // Dylan Vann <https://github.com/dylanvann>
- // Yuki Ito <https://github.com/Lazyuki>
- // Kazuma Ebina <https://github.com/kazuma1989>
- // Michael Lebedev <https://github.com/megazazik>
- // jun-sheaf <https://github.com/jun-sheaf>
- // Lenz Weber <https://github.com/phryneas>
- // Mark Erikson <https://github.com/markerikson>
- // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
- // TypeScript Version: 3.0
- import {
- ClassAttributes,
- Component,
- ComponentClass,
- ComponentType,
- FunctionComponent,
- Context,
- NamedExoticComponent,
- ReactNode
- } from 'react';
- import {
- Action,
- ActionCreator,
- AnyAction,
- Dispatch,
- Store
- } from 'redux';
- import hoistNonReactStatics = require('hoist-non-react-statics');
- /**
- * This interface can be augmented by users to add default types for the root state when
- * using `react-redux`.
- * Use module augmentation to append your own type definition in a your_custom_type.d.ts file.
- * https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation
- */
- // tslint:disable-next-line:no-empty-interface
- export interface DefaultRootState {}
- export type AnyIfEmpty<T extends object> = keyof T extends never ? any : T;
- export type RootStateOrAny = AnyIfEmpty<DefaultRootState>;
- // Omit taken from https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html
- export type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
- export type DistributiveOmit<T, K extends keyof T> = T extends unknown ? Omit<T, K> : never;
- export interface DispatchProp<A extends Action = AnyAction> {
- dispatch: Dispatch<A>;
- }
- export type AdvancedComponentDecorator<TProps, TOwnProps> =
- (component: ComponentType<TProps>) => NamedExoticComponent<TOwnProps>;
- /**
- * A property P will be present if:
- * - it is present in DecorationTargetProps
- *
- * Its value will be dependent on the following conditions
- * - if property P is present in InjectedProps and its definition extends the definition
- * in DecorationTargetProps, then its definition will be that of DecorationTargetProps[P]
- * - if property P is not present in InjectedProps then its definition will be that of
- * DecorationTargetProps[P]
- * - if property P is present in InjectedProps but does not extend the
- * DecorationTargetProps[P] definition, its definition will be that of InjectedProps[P]
- */
- export type Matching<InjectedProps, DecorationTargetProps> = {
- [P in keyof DecorationTargetProps]: P extends keyof InjectedProps
- ? InjectedProps[P] extends DecorationTargetProps[P]
- ? DecorationTargetProps[P]
- : InjectedProps[P]
- : DecorationTargetProps[P];
- };
- /**
- * a property P will be present if :
- * - it is present in both DecorationTargetProps and InjectedProps
- * - InjectedProps[P] can satisfy DecorationTargetProps[P]
- * ie: decorated component can accept more types than decorator is injecting
- *
- * For decoration, inject props or ownProps are all optionally
- * required by the decorated (right hand side) component.
- * But any property required by the decorated component must be satisfied by the injected property.
- */
- export type Shared<
- InjectedProps,
- DecorationTargetProps
- > = {
- [P in Extract<keyof InjectedProps, keyof DecorationTargetProps>]?: InjectedProps[P] extends DecorationTargetProps[P] ? DecorationTargetProps[P] : never;
- };
- // Infers prop type from component C
- export type GetProps<C> = C extends ComponentType<infer P>
- ? C extends ComponentClass<P> ? ClassAttributes<InstanceType<C>> & P : P
- : never;
- // Applies LibraryManagedAttributes (proper handling of defaultProps
- // and propTypes).
- export type GetLibraryManagedProps<C> = JSX.LibraryManagedAttributes<C, GetProps<C>>;
- // Defines WrappedComponent and derives non-react statics.
- export type ConnectedComponent<
- C extends ComponentType<any>,
- P
- > = NamedExoticComponent<P> & hoistNonReactStatics.NonReactStatics<C> & {
- WrappedComponent: C;
- };
- // Injects props and removes them from the prop requirements.
- // Will not pass through the injected props if they are passed in during
- // render. Also adds new prop requirements from TNeedsProps.
- // Uses distributive omit to preserve discriminated unions part of original prop type
- export type InferableComponentEnhancerWithProps<TInjectedProps, TNeedsProps> =
- <C extends ComponentType<Matching<TInjectedProps, GetProps<C>>>>(
- component: C
- ) => ConnectedComponent<C, DistributiveOmit<GetLibraryManagedProps<C>, keyof Shared<TInjectedProps, GetLibraryManagedProps<C>>> & TNeedsProps>;
- // Injects props and removes them from the prop requirements.
- // Will not pass through the injected props if they are passed in during
- // render.
- export type InferableComponentEnhancer<TInjectedProps> =
- InferableComponentEnhancerWithProps<TInjectedProps, {}>;
- export type InferThunkActionCreatorType<TActionCreator extends (...args: any[]) => any> =
- TActionCreator extends (...args: infer TParams) => (...args: any[]) => infer TReturn
- ? (...args: TParams) => TReturn
- : TActionCreator;
- export type HandleThunkActionCreator<TActionCreator> =
- TActionCreator extends (...args: any[]) => any
- ? InferThunkActionCreatorType<TActionCreator>
- : TActionCreator;
- // redux-thunk middleware returns thunk's return value from dispatch call
- // https://github.com/reduxjs/redux-thunk#composition
- export type ResolveThunks<TDispatchProps> =
- TDispatchProps extends { [key: string]: any }
- ? {
- [C in keyof TDispatchProps]: HandleThunkActionCreator<TDispatchProps[C]>
- }
- : TDispatchProps;
- // the conditional type is to support TypeScript 3.0, which does not support mapping over tuples and arrays;
- // once the typings are updated to at least TypeScript 3.1, a simple mapped type can replace this mess
- export type ResolveArrayThunks<TDispatchProps extends ReadonlyArray<any>> =
- TDispatchProps extends [infer A1, infer A2, infer A3, infer A4, infer A5, infer A6, infer A7, infer A8, infer A9]
- ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>, HandleThunkActionCreator<A3>, HandleThunkActionCreator<A4>,
- HandleThunkActionCreator<A5>, HandleThunkActionCreator<A6>, HandleThunkActionCreator<A7>, HandleThunkActionCreator<A8>, HandleThunkActionCreator<A9>]
- : TDispatchProps extends [infer A1, infer A2, infer A3, infer A4, infer A5, infer A6, infer A7, infer A8]
- ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>, HandleThunkActionCreator<A3>, HandleThunkActionCreator<A4>,
- HandleThunkActionCreator<A5>, HandleThunkActionCreator<A6>, HandleThunkActionCreator<A7>, HandleThunkActionCreator<A8>]
- : TDispatchProps extends [infer A1, infer A2, infer A3, infer A4, infer A5, infer A6, infer A7]
- ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>, HandleThunkActionCreator<A3>, HandleThunkActionCreator<A4>,
- HandleThunkActionCreator<A5>, HandleThunkActionCreator<A6>, HandleThunkActionCreator<A7>]
- : TDispatchProps extends [infer A1, infer A2, infer A3, infer A4, infer A5, infer A6]
- ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>, HandleThunkActionCreator<A3>, HandleThunkActionCreator<A4>, HandleThunkActionCreator<A5>, HandleThunkActionCreator<A6>]
- : TDispatchProps extends [infer A1, infer A2, infer A3, infer A4, infer A5]
- ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>, HandleThunkActionCreator<A3>, HandleThunkActionCreator<A4>, HandleThunkActionCreator<A5>]
- : TDispatchProps extends [infer A1, infer A2, infer A3, infer A4] ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>, HandleThunkActionCreator<A3>, HandleThunkActionCreator<A4>]
- : TDispatchProps extends [infer A1, infer A2, infer A3] ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>, HandleThunkActionCreator<A3>]
- : TDispatchProps extends [infer A1, infer A2] ? [HandleThunkActionCreator<A1>, HandleThunkActionCreator<A2>]
- : TDispatchProps extends [infer A1] ? [HandleThunkActionCreator<A1>]
- : TDispatchProps extends Array<infer A> ? Array<HandleThunkActionCreator<A>>
- : TDispatchProps extends ReadonlyArray<infer A> ? ReadonlyArray<HandleThunkActionCreator<A>>
- : never
- ;
- /**
- * Connects a React component to a Redux store.
- *
- * - Without arguments, just wraps the component, without changing the behavior / props
- *
- * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior
- * is to override ownProps (as stated in the docs), so what remains is everything that's
- * not a state or dispatch prop
- *
- * - When 3rd param is passed, we don't know if ownProps propagate and whether they
- * should be valid component props, because it depends on mergeProps implementation.
- * As such, it is the user's responsibility to extend ownProps interface from state or
- * dispatch props or both when applicable
- *
- * @param mapStateToProps
- * @param mapDispatchToProps
- * @param mergeProps
- * @param options
- */
- export interface Connect<DefaultState = DefaultRootState> {
- // tslint:disable:no-unnecessary-generics
- (): InferableComponentEnhancer<DispatchProp>;
- <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(
- mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>
- ): InferableComponentEnhancerWithProps<TStateProps & DispatchProp, TOwnProps>;
- <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(
- mapStateToProps: null | undefined,
- mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>
- ): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>;
- <no_state = {}, TDispatchProps = {}, TOwnProps = {}>(
- mapStateToProps: null | undefined,
- mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,
- ): InferableComponentEnhancerWithProps<
- ResolveThunks<TDispatchProps>,
- TOwnProps
- >;
- <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(
- mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
- mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>
- ): InferableComponentEnhancerWithProps<TStateProps & TDispatchProps, TOwnProps>;
- <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(
- mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
- mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,
- ): InferableComponentEnhancerWithProps<
- TStateProps & ResolveThunks<TDispatchProps>,
- TOwnProps
- >;
- <no_state = {}, no_dispatch = {}, TOwnProps = {}, TMergedProps = {}>(
- mapStateToProps: null | undefined,
- mapDispatchToProps: null | undefined,
- mergeProps: MergeProps<undefined, undefined, TOwnProps, TMergedProps>,
- ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>;
- <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, TMergedProps = {}, State = DefaultState>(
- mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
- mapDispatchToProps: null | undefined,
- mergeProps: MergeProps<TStateProps, undefined, TOwnProps, TMergedProps>,
- ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>;
- <no_state = {}, TDispatchProps = {}, TOwnProps = {}, TMergedProps = {}>(
- mapStateToProps: null | undefined,
- mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,
- mergeProps: MergeProps<undefined, TDispatchProps, TOwnProps, TMergedProps>,
- ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>;
- <TStateProps = {}, no_dispatch = {}, TOwnProps = {}, State = DefaultState>(
- mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
- mapDispatchToProps: null | undefined,
- mergeProps: null | undefined,
- options: Options<State, TStateProps, TOwnProps>
- ): InferableComponentEnhancerWithProps<DispatchProp & TStateProps, TOwnProps>;
- <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(
- mapStateToProps: null | undefined,
- mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,
- mergeProps: null | undefined,
- options: Options<{}, TStateProps, TOwnProps>
- ): InferableComponentEnhancerWithProps<TDispatchProps, TOwnProps>;
- <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}>(
- mapStateToProps: null | undefined,
- mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,
- mergeProps: null | undefined,
- options: Options<{}, TStateProps, TOwnProps>
- ): InferableComponentEnhancerWithProps<
- ResolveThunks<TDispatchProps>,
- TOwnProps
- >;
- <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(
- mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
- mapDispatchToProps: MapDispatchToPropsNonObject<TDispatchProps, TOwnProps>,
- mergeProps: null | undefined,
- options: Options<State, TStateProps, TOwnProps>
- ): InferableComponentEnhancerWithProps<TStateProps & TDispatchProps, TOwnProps>;
- <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, State = DefaultState>(
- mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
- mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,
- mergeProps: null | undefined,
- options: Options<State, TStateProps, TOwnProps>
- ): InferableComponentEnhancerWithProps<
- TStateProps & ResolveThunks<TDispatchProps>,
- TOwnProps
- >;
- <TStateProps = {}, TDispatchProps = {}, TOwnProps = {}, TMergedProps = {}, State = DefaultState>(
- mapStateToProps: MapStateToPropsParam<TStateProps, TOwnProps, State>,
- mapDispatchToProps: MapDispatchToPropsParam<TDispatchProps, TOwnProps>,
- mergeProps: MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps>,
- options?: Options<State, TStateProps, TOwnProps, TMergedProps>
- ): InferableComponentEnhancerWithProps<TMergedProps, TOwnProps>;
- // tslint:enable:no-unnecessary-generics
- }
- /**
- * Infers the type of props that a connector will inject into a component.
- */
- export type ConnectedProps<TConnector> =
- TConnector extends InferableComponentEnhancerWithProps<infer TInjectedProps, any>
- ? unknown extends TInjectedProps
- ? TConnector extends InferableComponentEnhancer<infer TInjectedProps>
- ? TInjectedProps
- : never
- : TInjectedProps
- : never;
- /**
- * The connect function. See {@type Connect} for details.
- */
- export const connect: Connect;
- export type MapStateToProps<TStateProps, TOwnProps, State = DefaultRootState> =
- (state: State, ownProps: TOwnProps) => TStateProps;
- export type MapStateToPropsFactory<TStateProps, TOwnProps, State = DefaultRootState> =
- (initialState: State, ownProps: TOwnProps) => MapStateToProps<TStateProps, TOwnProps, State>;
- export type MapStateToPropsParam<TStateProps, TOwnProps, State = DefaultRootState> =
- MapStateToPropsFactory<TStateProps, TOwnProps, State> | MapStateToProps<TStateProps, TOwnProps, State> | null | undefined;
- export type MapDispatchToPropsFunction<TDispatchProps, TOwnProps> =
- (dispatch: Dispatch<Action>, ownProps: TOwnProps) => TDispatchProps;
- export type MapDispatchToProps<TDispatchProps, TOwnProps> =
- MapDispatchToPropsFunction<TDispatchProps, TOwnProps> | TDispatchProps;
- export type MapDispatchToPropsFactory<TDispatchProps, TOwnProps> =
- (dispatch: Dispatch<Action>, ownProps: TOwnProps) => MapDispatchToPropsFunction<TDispatchProps, TOwnProps>;
- export type MapDispatchToPropsParam<TDispatchProps, TOwnProps> = MapDispatchToPropsFactory<TDispatchProps, TOwnProps> | MapDispatchToProps<TDispatchProps, TOwnProps>;
- export type MapDispatchToPropsNonObject<TDispatchProps, TOwnProps> = MapDispatchToPropsFactory<TDispatchProps, TOwnProps> | MapDispatchToPropsFunction<TDispatchProps, TOwnProps>;
- export type MergeProps<TStateProps, TDispatchProps, TOwnProps, TMergedProps> =
- (stateProps: TStateProps, dispatchProps: TDispatchProps, ownProps: TOwnProps) => TMergedProps;
- export interface Options<State = DefaultRootState, TStateProps = {}, TOwnProps = {}, TMergedProps = {}> extends ConnectOptions {
- /**
- * If true, implements shouldComponentUpdate and shallowly compares the result of mergeProps,
- * preventing unnecessary updates, assuming that the component is a “pure” component
- * and does not rely on any input or state other than its props and the selected Redux store’s state.
- * Defaults to true.
- * @default true
- */
- pure?: boolean | undefined;
- /**
- * When pure, compares incoming store state to its previous value.
- * @default strictEqual
- */
- areStatesEqual?: ((nextState: State, prevState: State) => boolean) | undefined;
- /**
- * When pure, compares incoming props to its previous value.
- * @default shallowEqual
- */
- areOwnPropsEqual?: ((nextOwnProps: TOwnProps, prevOwnProps: TOwnProps) => boolean) | undefined;
- /**
- * When pure, compares the result of mapStateToProps to its previous value.
- * @default shallowEqual
- */
- areStatePropsEqual?: ((nextStateProps: TStateProps, prevStateProps: TStateProps) => boolean) | undefined;
- /**
- * When pure, compares the result of mergeProps to its previous value.
- * @default shallowEqual
- */
- areMergedPropsEqual?: ((nextMergedProps: TMergedProps, prevMergedProps: TMergedProps) => boolean) | undefined;
- /**
- * If true, use React's forwardRef to expose a ref of the wrapped component
- *
- * @default false
- */
- forwardRef?: boolean | undefined;
- }
- /**
- * Connects a React component to a Redux store. It is the base for {@link connect} but is less opinionated about
- * how to combine <code>state</code>, <code>props</code>, and <code>dispatch</code> into your final props. It makes no
- * assumptions about defaults or memoization of results, leaving those responsibilities to the caller.It does not
- * modify the component class passed to it; instead, it returns a new, connected component for you to use.
- *
- * @param selectorFactory The selector factory. See SelectorFactory type for details.
- * @param connectOptions If specified, further customizes the behavior of the connector. Additionally, any extra
- * options will be passed through to your <code>selectorFactory</code> in the <code>factoryOptions</code> argument.
- */
- export function connectAdvanced<S, TProps, TOwnProps, TFactoryOptions = {}>(
- // tslint:disable-next-line no-unnecessary-generics
- selectorFactory: SelectorFactory<S, TProps, TOwnProps, TFactoryOptions>,
- connectOptions?: ConnectOptions & TFactoryOptions
- ): AdvancedComponentDecorator<TProps, TOwnProps>;
- /**
- * Initializes a selector function (during each instance's constructor). That selector function is called any time the
- * connector component needs to compute new props, as a result of a store state change or receiving new props. The
- * result of <code>selector</code> is expected to be a plain object, which is passed as the props to the wrapped
- * component. If a consecutive call to <code>selector</code> returns the same object (<code>===</code>) as its previous
- * call, the component will not be re-rendered. It's the responsibility of <code>selector</code> to return that
- * previous object when appropriate.
- */
- export type SelectorFactory<S, TProps, TOwnProps, TFactoryOptions> =
- (dispatch: Dispatch<Action>, factoryOptions: TFactoryOptions) => Selector<S, TProps, TOwnProps>;
- export type Selector<S, TProps, TOwnProps = null> = TOwnProps extends null | undefined
- ? (state: S) => TProps
- : (state: S, ownProps: TOwnProps) => TProps;
- export interface ConnectOptions {
- /**
- * Computes the connector component's displayName property relative to that of the wrapped component. Usually
- * overridden by wrapper functions.
- *
- * @default name => 'ConnectAdvanced('+name+')'
- * @param componentName
- */
- getDisplayName?: ((componentName: string) => string) | undefined;
- /**
- * Shown in error messages. Usually overridden by wrapper functions.
- *
- * @default 'connectAdvanced'
- */
- methodName?: string | undefined;
- /**
- * If defined, a property named this value will be added to the props passed to the wrapped component. Its value
- * will be the number of times the component has been rendered, which can be useful for tracking down unnecessary
- * re-renders.
- *
- * @default undefined
- */
- renderCountProp?: string | undefined;
- /**
- * Controls whether the connector component subscribes to redux store state changes. If set to false, it will only
- * re-render on <code>componentWillReceiveProps</code>.
- *
- * @default true
- */
- shouldHandleStateChanges?: boolean | undefined;
- /**
- * The key of props/context to get the store. You probably only need this if you are in the inadvisable position of
- * having multiple stores.
- *
- * @default 'store'
- */
- storeKey?: string | undefined;
- /**
- * @deprecated Use forwardRef
- *
- * @default false
- */
- withRef?: boolean | undefined;
- /**
- * The react context to get the store from.
- *
- * @default ReactReduxContext
- */
- context?: Context<ReactReduxContextValue> | undefined;
- }
- export interface ReactReduxContextValue<SS = any, A extends Action = AnyAction> {
- store: Store<SS, A>;
- storeState: SS;
- }
- export interface ProviderProps<A extends Action = AnyAction> {
- /**
- * The single Redux store in your application.
- */
- store: Store<any, A>;
- /**
- * Optional context to be used internally in react-redux. Use React.createContext() to create a context to be used.
- * If this is used, generate own connect HOC by using connectAdvanced, supplying the same context provided to the
- * Provider. Initial value doesn't matter, as it is overwritten with the internal state of Provider.
- */
- context?: Context<ReactReduxContextValue> | undefined;
- children?: ReactNode;
- }
- /**
- * Makes the Redux store available to the connect() calls in the component hierarchy below.
- */
- export class Provider<A extends Action = AnyAction> extends Component<ProviderProps<A>> { }
- /**
- * Exposes the internal context used in react-redux. It is generally advised to use the connect HOC to connect to the
- * redux store instead of this approach.
- */
- export const ReactReduxContext: Context<ReactReduxContextValue>;
- /**
- * Wraps ReactDOM or React Native's internal unstable_batchedUpdate function. You can use it to ensure that
- * multiple actions dispatched outside of React only result in a single render update.
- */
- export function batch(cb: () => void): void;
- // tslint:disable:no-unnecessary-generics
- /**
- * Compares two arbitrary values for shallow equality. Object values are compared based on their keys, i.e. they must
- * have the same keys and for each key the value must be equal according to the `Object.is()` algorithm. Non-object
- * values are also compared with the same algorithm as `Object.is()`.
- */
- export function shallowEqual<T>(left: T, right: any): boolean;
- /**
- * A hook to access the redux `dispatch` function.
- *
- * Note for `redux-thunk` users: the return type of the returned `dispatch` functions for thunks is incorrect.
- * However, it is possible to get a correctly typed `dispatch` function by creating your own custom hook typed
- * from the store's dispatch function like this: `const useThunkDispatch = () => useDispatch<typeof store.dispatch>();`
- *
- * @returns redux store's `dispatch` function
- *
- * @example
- *
- * import React from 'react'
- * import { useDispatch } from 'react-redux'
- *
- * export const CounterComponent = ({ value }) => {
- * const dispatch = useDispatch()
- * return (
- * <div>
- * <span>{value}</span>
- * <button onClick={() => dispatch({ type: 'increase-counter' })}>
- * Increase counter
- * </button>
- * </div>
- * )
- * }
- */
- // NOTE: the first overload below and note above can be removed if redux-thunk typings add an overload for
- // the Dispatch function (see also this PR: https://github.com/reduxjs/redux-thunk/pull/247)
- export function useDispatch<TDispatch = Dispatch<any>>(): TDispatch;
- export function useDispatch<A extends Action = AnyAction>(): Dispatch<A>;
- /**
- * A hook to access the redux store's state. This hook takes a selector function
- * as an argument. The selector is called with the store state.
- *
- * This hook takes an optional equality comparison function as the second parameter
- * that allows you to customize the way the selected state is compared to determine
- * whether the component needs to be re-rendered.
- *
- * If you do not want to have to specify the root state type for whenever you use
- * this hook with an inline selector you can use the `TypedUseSelectorHook` interface
- * to create a version of this hook that is properly typed for your root state.
- *
- * @param selector the selector function
- * @param equalityFn the function that will be used to determine equality
- *
- * @returns the selected state
- *
- * @example
- *
- * import React from 'react'
- * import { useSelector } from 'react-redux'
- * import { RootState } from './store'
- *
- * export const CounterComponent = () => {
- * const counter = useSelector((state: RootState) => state.counter)
- * return <div>{counter}</div>
- * }
- */
- export function useSelector<TState = DefaultRootState, TSelected = unknown>(
- selector: (state: TState) => TSelected,
- equalityFn?: (left: TSelected, right: TSelected) => boolean
- ): TSelected;
- /**
- * This interface allows you to easily create a hook that is properly typed for your
- * store's root state.
- *
- * @example
- *
- * interface RootState {
- * property: string;
- * }
- *
- * const useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;
- */
- export interface TypedUseSelectorHook<TState> {
- <TSelected>(
- selector: (state: TState) => TSelected,
- equalityFn?: (left: TSelected, right: TSelected) => boolean
- ): TSelected;
- }
- /**
- * A hook to access the redux store.
- *
- * @returns the redux store
- *
- * @example
- *
- * import React from 'react'
- * import { useStore } from 'react-redux'
- *
- * export const ExampleComponent = () => {
- * const store = useStore()
- * return <div>{store.getState()}</div>
- * }
- */
- export function useStore<S = RootStateOrAny, A extends Action = AnyAction>(): Store<S, A>;
- /**
- * Hook factory, which creates a `useSelector` hook bound to a given context.
- *
- * @param Context passed to your `<Provider>`.
- * @returns A `useSelector` hook bound to the specified context.
- */
- export function createSelectorHook<S = RootStateOrAny, A extends Action = AnyAction>(
- context?: Context<ReactReduxContextValue<S, A>>,
- ): <Selected extends unknown>(
- selector: (state: S) => Selected,
- equalityFn?: (previous: Selected, next: Selected) => boolean,
- ) => Selected;
- /**
- * Hook factory, which creates a `useStore` hook bound to a given context.
- *
- * @param Context passed to your `<Provider>`.
- * @returns A `useStore` hook bound to the specified context.
- */
- export function createStoreHook<S = RootStateOrAny, A extends Action = AnyAction>(
- context?: Context<ReactReduxContextValue<S, A>>,
- ): () => Store<S, A>;
- /**
- * Hook factory, which creates a `useDispatch` hook bound to a given context.
- *
- * @param Context passed to your `<Provider>`.
- * @returns A `useDispatch` hook bound to the specified context.
- */
- export function createDispatchHook<S = RootStateOrAny, A extends Action = AnyAction>(
- context?: Context<ReactReduxContextValue<S, A>>,
- ): () => Dispatch<A>;
- // tslint:enable:no-unnecessary-generics
|