根据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);
...
我通过使用useEffect或useValueChanged,就像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,
);