概述
写测试生命周期的Demo的时候,用到了this.forceUpdate,然后为了能响应一个事件的处理,想当然地使用了this.forceUpdate.bind(this),然而却得到了一个错误。
问题
假设有组件如下。
1 | // ... |
上面的写法,将forceUpdate绑定this,直接交给onClick事件,其实这么做也没有什么问题,该强制更新还是强制更新,该重新渲染还是重新渲染,点击按钮以后可以看到需要的效果没有错。
但是控制台还是意外地报了一个错,虽然不影响React正常执行。
解决方法
查看官方文档会发现,this.forceUpdate是可以接收一个函数作为参数的。这样问题就很清楚了,当把点击事件直接交给this.forceUpdate事,事件对象Event会直接传给this.forceUpdate,而forceUpdate在执行之前做了类型检查,发现是事件对象而不是函数,所以报错。
那么解决方法就很明显了。
1 | // ... |
如上,还是老老实实在自定义的函数中调用比较好,而且一般情况下也很少直接给一个按钮,只做响应一个强制更新。