dart 如何在Flutter Hooks中从父节点更新“useState”的initialData

j2cgzkjk  于 2023-04-03  发布在  Flutter
关注(0)|答案(1)|浏览(148)

根据flutter_hooks中对useState的描述:

... 
/// On the first call, it initializes [ValueNotifier] to [initialData]. [initialData] is ignored
/// on subsequent calls.
...

我想使用useState来改变当前widget的状态,同时我还想在从父级改变值时忽略initialDataNOT,如何实现?

class MyHookWidget extends HookWidget {
  const MyHookWidget({required this.valueFromParent, super.key});

  final int valueFromParent;

  @override
  Widget build(BuildContext context) {
    final state = useState<int>(valueFromParent);
...
nkoocmlb

nkoocmlb1#

我通过使用useEffectuseValueChanged来跨越它,这就像StatefulWidget的didUpdateWidget
∮ ∮ ∮ ∮
对副作用有用,并可选择性地消除它们。
useEffect在每次构建时都会被同步调用,除非指定了keys。在这种情况下,只有当keys中的任何值发生更改时,useEffect才会再次被调用。
它接受一个效果回调并同步调用它。该效果可以选择返回一个函数,当再次调用该效果或释放该小部件时,将调用该函数。
默认情况下,除非指定了keys,否则在每次构建调用时都会调用effect。在这种情况下,effect在第一次useEffect调用时调用一次,并且每当keys中的某些内容发生更改时/
示例:

final state = useState<int>(valueFromParent);

useEffect(() {
  state.value = valueFromParent;
  return () {};
}, [valueFromParent]);

∮ ∮ ∮ ∮
监视一个值并在该值更改时触发回调。
useValueChanged接受valueChange回调,并在值更改时调用它。第一次useValueChanged调用时不会调用valueChange。
useValueChanged也可用于插值每当使用不同的值调用useValueChanged时,调用valueChange。useValueChanged返回的值是valueChange的最新返回值或null。
示例:

final state = useState<int>(valueFromParent);

useValueChanged(
  valueFromParent,
  (_, __) => state.value = valueFromParent,
);

相关问题