我们应该记住关闭吗?

时间:2019-08-26 10:53:16

标签: flutter

我正在将functional_widget包与flutter_hooks一起使用。我需要为事件处理程序创建闭包,我想知道什么是正确的方法:

@hwidget
Widget foo1() {
  final state = useState(0);
  final onPressed = () {
    state.value++;
  };
  return RaisedButton(onPressed: onPressed);
}

vs

@hwidget
Widget foo2() {
  final state = useState(0);
  final onPressed = useMemoized(() => () {
        state.value++;
      });
  return RaisedButton(onPressed: onPressed);
}

我是通过使用useMemomized来节省成本还是使其变得更糟?有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

可以,但这不是必需的。

另一方面,正确执行此操作至关重要:

final state = useState(0);
final cb = useMemoized(() => () {
  state.value++;
}, [state]);

不这样做可能会导致您的闭包指向先前的参数,而不是新的参数。