更新: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>