useReducerLazy<TState, TAction, TInit> function

ReducerHook<TState, TAction, TInit> useReducerLazy<TState, TAction, TInit>(
  1. TState reducer(
    1. TState state,
    2. TAction action
    ),
  2. TInit initialArg,
  3. TState init(
    1. TInit
    )
)

Initializes state of a uiFunction component to init(initialArg) and creates ReducerHook.dispatch method.

Example:

Map initializeCount(int initialValue) {
  return {'count': initialValue};
}

Map reducer(Map state, Map action) {
  switch (action['type']) {
    case 'increment':
      return {...state, 'count': state['count'] + 1};
    case 'decrement':
      return {...state, 'count': state['count'] - 1};
    case 'reset':
      return initializeCount(action['payload']);
    default:
      return state;
  }
}

mixin UseReducerExampleProps on UiProps {
  int initialCount;
}

UiFactory<UseReducerExampleProps> UseReducerExample = uiFunction(
  (props) {
    final ReducerHook<Map, Map, int> state =
    useReducerLazy(reducer, props.initialCount, initializeCount);

    return Fragment()(
      state.state['count'],
      (Dom.button()
        ..onClick = (_) => state.dispatch({'type': 'increment'})
      )('+'),
      (Dom.button()
        ..onClick = (_) => state.dispatch({'type': 'decrement'})
      )('-'),
      (Dom.button()
        ..onClick = (_) => state.dispatch({
          'type': 'reset',
          'payload': props.initialCount,
        })
      )('reset'),
    );
  },
  _$UseReducerExampleConfig, // ignore: undefined_identifier
);

Learn more: reactjs.org/docs/hooks-reference.html#lazy-initialization.

Implementation

ReducerHook<TState, TAction, TInit> useReducerLazy<TState, TAction, TInit>(
    TState Function(TState state, TAction action) reducer, TInit initialArg, TState Function(TInit) init) =>
    react_hooks.useReducerLazy(reducer, initialArg, init);