向React setState传入undefined是否有问题?是否符合开发最佳实践?
结论
你当前的写法不存在任何问题,完全符合React和TypeScript的最佳实践规范。
- 符合React状态的设计逻辑:你声明状态时没有传入初始值,React默认的初始状态就是
undefined,该状态的原生类型就是IUser['id'][] | undefined,和Select组件的value类型约束完全匹配,调用setSelectedUsers(undefined)本质是将状态重置为初始值,没有任何运行时隐患。 - 避免了类型安全问题:如果为了清空强行传
null,你需要额外加类型断言绕过TS校验,本质是破坏了类型检查的可靠性,用undefined完全匹配类型约束,不需要额外的hack操作,类型安全性更高。 - 符合组件的预期行为:你使用的Select组件本身就支持传入
undefined作为value来实现清空选中的效果,实际运行也验证了功能正常,不存在兼容性问题。
可选优化方向
如果想进一步简化后续的状态处理逻辑,也可以调整状态的初始值为空数组:
const [selectedUsers, setSelectedUsers] = useState<IUser['id'][]>([]);
清空的时候直接赋值为空数组即可:
setSelectedUsers([]);
这种写法的好处是状态永远是数组类型,后续遍历、处理选中值的时候不需要额外做非空判断,编码更省心。两种写法都是合法的最佳实践,可根据你的业务编码习惯选择即可。
内容的提问来源于stack exchange,提问作者Gustavo Máximo
相关产品推荐
相关产品推荐

