【发布时间】:2021-03-09 12:34:51
【问题描述】:
让我们考虑下面的代码 sn-p,它是从React tutorial demo calculator 修改而来的。分别在赋值语句之前放置了两个日志记录调用。
export default class Button extends React.Component {
// <= The newly added content
static propTypes = (console.log("static statement executed"), {.
name: PropTypes.string,
orange: PropTypes.bool,
wide: PropTypes.bool,
clickHandler: PropTypes.func,
});
// <= The newly added content
member = (console.log("normal statement executed"), 1);
handleClick = () => {
this.props.clickHandler(this.props.name);
};
render() {
const className = [
"component-button",
this.props.orange ? "orange" : "",
this.props.wide ? "wide" : "",
];
return (
<div className={className.join(" ").trim()}>
<button onClick={this.handleClick}>{this.props.name}</button>
</div>
);
}
}
在执行npm run build 并检查build/static/ 下的工件后,我发现与静态分配关联的第一个日志记录语句消失了,而第二个记录语句保留了下来。此外,查看页面的浏览器控制台确实记录了第二条消息,但没有记录第一条消息。
所以我想知道 React 或 CRA 是否优化了任何静态语句?如果是这样,如何防止这样的语句得到优化?
【问题讨论】:
-
有趣的问题;为什么要阻止优化?
-
@ch271828n 您好,我正在使用 JavaScript 覆盖工具 nyc 来检测我的代码。 nyc 在代码行之前使用计数器来确定行是否被执行。在我上面的情况下,nyc 实际上在静态语句中插入了计数器,但是这些计数器在构建过程中消失了,并且生成的覆盖率数据是错误的。我想这与 react 或 cra 有关。为简单起见,我使用
console.log来演示我的问题
标签: javascript reactjs web babeljs create-react-app