修复流节点问题“未知的属性querySelector”

发布于:2021-02-06 00:00:45

0

187

0

Flow React

Flow是许多React项目中使用的静态类型检查器,有时感觉像是礼物和诅咒。这是一种礼物,它可以识别代码中的弱点,还有一个诅咒,有时您会觉得自己不必要调整代码来满足Flow。我已经变得很欣赏Flow,但这并不意味着我最终要花费额外的时间来寻找新的编码方法。

最近,我遇到了一个问题:我在React元素中查询一个节点,然后querySelector 在该节点上使用它来找到一个子节点。令人惊讶的是Flow出现了问题:

无法调用节点。querySelector因为财产querySelector的未知

const { maxHeight } = this.state; const node = ReactDOM.findDOMNode(this);   if (node && node.querySelector) {      const popupNode = node.querySelector(".preview-popup");   if (popupNode) {      popupNode.style.maxHeight = `${maxHeight}px`; } /private/tmp/flow/flowlib_34a4c903/react-dom.js [1] 14│ ): null | Element | Text;

找到1个错误

事实证明findDOMNode 可以返回类型 Text,因此querySelectorAll 可以undefined; 流不喜欢undefined。解决的办法是使用instanceOf  具有HTMLElement:

if (node instanceOf HTMLElement) {     // ... }

解决方案是合理的,但我的一部分默默地冒充&& node.querySelector 不合格。最后,Flow非常有用,以至于像这样的微小变化都不会使我感到困惑。