向React的useState()传入变量类型是否具备合理性?
关于useState传入Boolean构造函数的写法合理性
这种写法语法合法,但属于非常规且几乎无实用价值的写法,下面给你拆解清楚:
核心原理
你之前对useState的基础理解是正确的:
- useState返回状态变量和对应的更新函数
- 它的唯一参数是初始状态,这个参数可以是任意JavaScript值——包括函数(Boolean是JS内置的构造函数,本质是个函数)
当你写const [isDone, setIsDone] = useState(Boolean);时,isDone的初始值就是Boolean这个函数本身,而非布尔值。此时执行typeof isDone会返回'function',而不是'boolean'。
为什么这是奇怪的写法?
绝大多数场景下,我们用useState定义布尔状态时,要么直接传具体布尔值:
const [isDone, setIsDone] = useState(false);
要么用函数式初始化(当初始状态需要通过计算得到时):
// 基于某个值生成布尔初始状态 const [isDone, setIsDone] = useState(() => Boolean(someVariable));
这里要注意,函数式初始化是传一个「返回初始状态的函数」,React会自动调用它拿到初始值;而直接传Boolean,是把函数本身当成了初始状态,这完全是两回事。
结论
这种写法本身不违反React规则,但几乎没有实际应用场景,还容易造成误解——大概率是代码写错了,正确的布尔状态初始化应该用具体布尔值或函数式初始化来生成布尔值。
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

