如何解决React useState的钩子InitialState拆分和传播
我构建了一个自定义钩子,该钩子接受一个initialState
参数,并使用三个useState
钩子在内部存储它。对于对象值,这很好用,但是对于使用函数的延迟初始化值,这似乎有些棘手。
简单版本:
const useMyHook = (initialState) => {
const [foo,setFoo] = useState(initialState.foo);
const [bar,setBar] = useState(initialState.bar);
const [baz,setBaz] = useState(initialState.baz);
}
// usage
useMyHook({
foo: 1,bar: 2,baz: 3
});
但是因为有时我需要进行一些昂贵的计算,所以在这些情况下,我想使用函数而不是普通值:
useMyHook(() => ({
foo: some(),bar: expensive(),baz: computations()
}));
但是现在我必须编写一些复杂的代码来拆分和传播initialState
的结果。
const useMyHook = (initialState) => {
const [foo,setFoo] = useState(typeof initialState === 'function' ? () => initialState().foo : initialState.foo);
const [bar,setBar] = useState(typeof initialState === 'function' ? () => initialState().bar : initialState.bar);
const [baz,setBaz] = useState(typeof initialState === 'function' ? () => initialState().baz : initialState.baz);
}
我什至不确定这是否能奏效。但是即使这样做,它仍然会在第一次渲染时执行initialState
函数三遍,这并不好。当然,代码看起来很难看。
尽管我正在寻找以下解决方案:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。