javascript - this.setState 不是函数,并且 .bind(this) 不是函数
问题描述
我遇到的问题是我无法this.setState
在外部库方法的回调内部调用,也无法绑定到该方法。
我正在使用一个名为 html2canvas 的库,我需要访问我正在使用其中一种方法的类的状态。
这是我的课:
class Test extends React.Component {
constructor(props) {
super(props);
}
componentDidMount() {
html2canvas(document.getElementById("target"), {
onrendered: function (canvas) {
var base64image = canvas.toDataURL("image/png");
document.body.appendChild(canvas);
this.setState({canvas: canvas} );
},
width:320,
height:220
}).bind(this);
}
}
这将返回以下错误:
Inline Babel script:23 Uncaught TypeError: html2canvas(...).bind is not a function
at Hello.componentDidMount (<anonymous>:22:8)
at commitLifeCycles (react-dom.development.js:17469)
at commitAllLifeCycles (react-dom.development.js:18871)
at HTMLUnknownElement.callCallback (react-dom.development.js:143)
at Object.invokeGuardedCallbackDev (react-dom.development.js:193)
at invokeGuardedCallback (react-dom.development.js:250)
at commitRoot (react-dom.development.js:19083)
at react-dom.development.js:20553
at unstable_runWithPriority (react.development.js:735)
at completeRoot (react-dom.development.js:20552)
正在.bind(this)
通话中。
Inline Babel script:19 Uncaught TypeError: this.setState is not a function
at Object.onrendered (<anonymous>:18:14)
at Object.o.complete (html2canvas.min.js:8)
at o (html2canvas.min.js:7)
at Object.u.Preload (html2canvas.min.js:7)
at html2canvas.min.js:8
您可以在此处查看 JSFiddle 上的示例:https ://jsfiddle.net/michael_t/6q34ofws/125/
解决方案
第一个问题是你.bind(this)
在错误的地方使用,它应该绑定到运行的匿名函数onrendered
。
但是,this
如果您改为更改为箭头函数,则无需绑定到函数,这样您的函数就不会绑定this
到自身,而是会引用Class
.
html2canvas(document.getElementById("target"), {
onrendered: (canvas) => {
...
this.setState({canvas: canvas} );
},
...
})
推荐阅读
- haskell - 在 Haskell 中为什么我们不能组成 show 和 fst
- c# - projekt中localDb的文件路径
- opencv - OpenCV背景模型成分提取
- where - 我试图在 crud 控制器中使用 addclause where in (1,2,4,5,6...)
- python - QregExp 类 PyQt4
- c# - 如何使用 msbuild 15 从生成的 nuget 包中的 nuspec 文件中删除依赖项部分
- python - 你能用 Tox 中的文件列表遍历命令吗
- qt - 让 QTabWidget 平放
- algorithm - 我怎样才能找到这个问题的复杂性:循环中的递归函数
- r - 在函数 R 中循环