0

更新:2018-05-23

所以,这不能被复制的原因是,我删除了代码的某些部分(与项目相关的东西),这些部分实际上是问题的一部分。

1) 我在这个项目中使用 react-router (react-router-dom) 并通过添加一个 lib ([lib] 内部的部分.flowconfig) 添加了一些流兼容性,我在其中进行第三方模块定义。

文件四react-router:

declare module 'react-router-dom' {
    declare module.exports: any;
}

2) 条件渲染包括来自 React-Router 的组件:

import {Link} from "react-router-dom";

// ....

{this.state.something !== null &&
<li>
    <Link to={`/to/${this.state.something.id}`}>
        {this.state.something.name}
    </Link>
</li>
}

// ....

因此,流在这种情况下会停止正常工作。

它不是由字符串模板的使用引起的,也不是由作为属性的使用引起的,它连接到“flowtype-mock-module”。

将流类型定义更改为此没有帮助。还是同样的问题


使用 flowtype 并做出反应,我经常安静地面临以下问题。您将如何解决它,或者是否有任何最佳实践来处理以下情况?

反应状态的类型定义:

type SomeType = {
    id: number,
};

type State = {
    something: SomeType | null,
}

和条件渲染场景:

render() {
    return (
        <div>
            {this.state.something !== null &&
                <b>this.state.something.id</b>
            }
        </div>
    )
}

现在 flow 会告诉我,我无法访问 null 的 id 属性,但“某物”实际上永远不会为 null,因此它必须是 SomeType 类型。

运行流程将导致类似:

Cannot get this.state.something.id because property id is missing in null [1].

 [1] 17│     something: SomeType | null,
       :
     60│                         </div>
     61│                         {this.state.something !== null &&
     62│                         <b>
     63│                             {this.state.something.id}
     66│                         </b>
4

0 回答 0