如何在颤振钩子中更新来自父级的"useState"的初始数据



根据flutter_hooks中useState的描述:

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

我想使用useState来更改当前小部件状态。我还需要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);
...

我通过使用useEffectuseValueChanged,就像didUpdateWidget for StatefulWidget.

useEffect

可用于副作用并可选择取消它们。

在每次构建时同步调用useEffect,除非keys是指定。在这种情况下,只有当有任何值时才会再次调用useEffect

它接受一个effect回调,并同步调用它。这种效果可选择返回一个函数,该函数将在调用时生效

默认情况下,每次构建调用都会调用

,除非keys是指定。在这种情况下,effect在第一次使用effect时被调用一次/

的例子:

final state = useState<int>(valueFromParent);
useEffect(() {
state.value = valueFromParent;
return () {};
}, [valueFromParent]);

useValueChanged

监视一个值,并在该值发生变化时触发回调。

usevaluechange接受valueChange回调,并在任何时候调用它值改变。valueChange将不会在第一次调用useValueChanged电话。

usevaluechange也可以用来插入每当用一个不同的值调用usevaluechange,调用valueChange。的最新返回值

的例子:

final state = useState<int>(valueFromParent);
useValueChanged(
valueFromParent,
(_, __) => state.value = valueFromParent,
);

相关内容

  • 没有找到相关文章

最新更新