發(fā)布于:2021-02-06 00:00:45
0
202
0
Flow是許多React項目中使用的靜態(tài)類型檢查器,有時感覺像是禮物和詛咒。這是一種禮物,它可以識別代碼中的弱點,還有一個詛咒,有時您會覺得自己不必要調整代碼來滿足Flow。我已經變得很欣賞Flow,但這并不意味著我最終要花費額外的時間來尋找新的編碼方法。
最近,我遇到了一個問題:我在React元素中查詢一個節(jié)點,然后querySelector 在該節(jié)點上使用它來找到一個子節(jié)點。令人驚訝的是Flow出現了問題:
無法調用節(jié)點。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非常有用,以至于像這樣的微小變化都不會使我感到困惑。
作者介紹