useEffect function

void useEffect(
  1. Object? sideEffect(), [
  2. List<Object?>? dependencies
])

Runs sideEffect after every completed render of a function component.

If dependencies are given, sideEffect will only run if one of the dependencies have changed. sideEffect may return a cleanup function that is run before the component unmounts or re-renders.

Note: there are two rules for using Hooks:

  • Only call Hooks at the top level.
  • Only call Hooks from inside a function component.

Example:

final MyComponent = registerFunctionComponent((props) {
  final count = useState(1);
  final evenOdd = useState('even');

  useEffect(() {
    evenOdd.set(count.value % 2 == 0 ? 'even' : 'odd');
    return () {
      print('cleanup: count is changing...');
    };
  }, [count.value]);

  return div(children: [
    pEl('\${count.value} is \${evenOdd.value}'),
    button(text: '+', onClick: () => count.set(count.value + 1)),
  ]);
});

Implementation

void useEffect(Object? Function() sideEffect, [List<Object?>? dependencies]) {
  JSAny? wrappedSideEffect() {
    final result = sideEffect();
    return (result is void Function()) ? result.toJS : _jsUndefined;
  }

  final jsDeps = dependencies?.map(_toJsAny).toList().toJS;
  React.useEffect(wrappedSideEffect.toJS, jsDeps);
}