【发布时间】:2018-08-02 04:32:54
【问题描述】:
我有以下嵌套类结构:
import React, {Component} from 'react';
import {TextField} from '@material-ui/core';
import './ProfileEditor.css';
export default class ProfileEditor extends Component {
SyncedTextField = class SyncedTextField extends Component {
onChange = event => {
console.log(this);
};
render() {
return (
<TextField
{...this.props}
onChange={this.onChange}/>
);
}
};
render() {
return (
<form className={"ProfileEditor"}>
<this.SyncedTextField/>
</form>
);
}
}
当代码被 Webpack 打包并在 Firefox 中运行时,它可以正确运行 this.onChange,但输出的 this 引用了 ProfileEditor 类的上下文。
这太奇怪了,因为在 JSX 中,当我引用“this”时,它正确指向 SyncedTextField,但在 onChange 方法中,它指向 ProfileEditor。
我确实向ProfileEditor 添加了一些属性以自我检查,并且这些属性显示为ProfileEditor 中声明的那样,即使在 SyncedTextField 中提供了冲突的定义。
谁能告诉我如何避免这个问题,以及可能是什么原因造成的?
【问题讨论】:
-
在 Microsoft Edge 中测试时会发生同样的情况。
-
是的,没错——因为它是一个箭头函数......其
this与函数是常规符号不同(即你是如何做到的render()) -
哦,所以箭头函数将保持绑定到
ProfileEditor范围,而不是SyncedTextField?对我来说似乎有点奇怪,但谢谢! -
这与定义函数时
this的含义有关-我在解释箭头函数时很糟糕:p 有什么理由你不能onChange(event) {。 .. 等等? -
不,没有,我只是在试验上下文会是什么,结果真的让我吃惊。我认为这可能是因为
class在内部是一种更好的方式来提供带有原型的函数,我在登录时看到了它。
标签: javascript reactjs firefox webpack