reactjs - 为什么我们在函数引用之前添加“ ( ) => ”?
问题描述
我正在学习打字稿,并试图从 Microsoft Fluent UI 实现一个detailList组件,但我遇到了一些麻烦:
Type '(ev: React.MouseEvent<HTMLElement>, checked: boolean) => void' is not assignable to type '(event: MouseEvent<HTMLElement, MouseEvent>, checked?: boolean | undefined) => void'.
在代码中,单击切换按钮时会引用一个名为 _onChangeCompactMode 的函数
private _onChangeCompactMode = (ev: React.MouseEvent<HTMLElement>, checked: boolean): void => {
this.setState({ isCompactMode: checked });
这是它被引用的地方:
<Fabric>
<div className={classNames.controlWrapper}>
<Toggle
label="Enable compact mode"
checked={isCompactMode}
onChange={this._onChangeCompactMode}
onText="Compact"
offText="Normal"
styles={controlStyles}
/>
...
</Fabric>
我通过将此行更改为此来解决此onChange={this._onChangeCompactMode}
问题onChange={() => this._onChangeCompactMode}
我不确定为什么这使它起作用。我的理解是,我传递了一个函数引用。但是为什么它不能按原样工作() =>
这里还是新的,所以欢迎有建设性的反馈。
解决方案
你必须小心this
JSX 回调的含义。如果您忘记将其绑定this._onChangeCompactModeand
传递给 onChange,则在实际调用该函数时这将是未定义的。这就是为什么你必须arrow function
像你一样使用 。或者它_onChangeCompactMode
本身必须是一个箭头函数,像这样:
_onChangeCompactMode = () => {
// your code
}
然后传递它的参考:
onChange={this._onChangeCompactMode}
他们应该工作相同
推荐阅读
- typescript - 在 TypeScript 中导入 ipfs
- html - 顶部和左侧 css 值在我的代码中不起作用
- node.js - 安装引导程序后反应应用程序本地主机损坏
- postgresql - 从另一个表中插入一个 Postgres 表?
- azure - 运行 Azure Kubernetes 服务的 Web 前端示例的 URL 请求超时错误
- node.js - Bootstrap 不通过 npm 创建节点模块文件夹
- java - 在 JavaFX 中绑定对象
- macos - 可以使此 udev 规则在 OSX 上工作的等效 OSX 吗?
- reactjs - 我在哪里添加 React 中的函数?
- azure - Azure 计时器功能。何时添加 cursor.close