javascript - this.setState 不是函数,.bind(this) 也不是函数

标签 javascript reactjs this

我遇到的问题是我无法调用 this.setState在外部库方法的回调内部,我也无法绑定(bind)到该方法。

我正在使用一个名为 html2canvas 的库,并且我需要访问我正在使用其中一种方法的类的状态。

这是我的类(class):

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),它应该绑定(bind)到运行 onrendered 的匿名函数。

但是,如果您改为箭头函数,则无需将 this 绑定(bind)到函数,这样您的函数就不会将 this 绑定(bind)到自身,而是将请参阅

html2canvas(document.getElementById("target"), {
     onrendered: (canvas) => {
          ...
          this.setState({canvas: canvas} );
        },
     ...
})

关于javascript - this.setState 不是函数,.bind(this) 也不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56777003/

相关文章:

javascript - 保存 Canvas 像素或状态以供以后使用的更快方法是什么?

javascript - 从对象中删除所有符号的最有效方法是什么?

javascript - 无法在 IE9 及更高版本中从 HyperLink 控件打开文件

javascript - Vuex Action 中的动态值

node.js - 使用环境变量进行 Stripe 支付错误react.js node.js

javascript - 如何在 Reactjs 中创建自定义模式

javascript - “this”关键字并不总是指代定义方法的对象,而是可以根据特定上下文进行更改。如何?

reactjs - Firebase 存储规则 - 意外 'userId'

javascript - (this).attr() 在 jquery.noConflict() 之后停止工作

javascript - this.function 不是函数错误,而是函数存在