我试图使用setState
的第二个参数来传递回调函数,但它显示(从我能收集的内容)服务器端渲染器完全忽略此参数。我使用Gatsby,它利用服务器端渲染来构建一个基于静态React的站点。我的电话是在onChange
处理程序,如下所示:如预期React服务器端渲染器省略setState回调函数?
this.setState({ [event.target.name]: event.target.value },() => { console.log('setState callback') })
的状态更新,但回调不会被调用。 注意:无论我传递第一个参数的对象还是函数,都会出现同样的问题。组件功能如下:
ReactComponent.prototype.setState = function (partialState, callback) {
[...]
this.updater.enqueueSetState(this, partialState, callback, 'setState');
};
这更新的方法,(根据调用堆栈),它生活在ReactUpdateQueue.js
看起来是这样的:
enqueueSetState: function (publicInstance, partialState)
我不完全理解建立过程的反应,但我相信方法/文件来自this文件中的来源:
/src/renderers/shared/server/ReactPartialRenderer.js
唯一的其他地方,我可以找到这个函数是here:
/src/isomorphic/modern/class/ReactNoopUpdateQueue.js
enqueueSetState: function(
publicInstance,
partialState,
callback,
callerName,
) {
warnNoop(publicInstance, 'setState');
}
它看起来像正确的方法签名,但是当我调试我的代码setState
调用不会调用堆栈中的任何地方出现。这似乎不是客户端渲染的React组件的问题(我会尝试设置一个简单的repo来显示此问题,但它不会在CodePen等上显示可复制)。我知道我可以使用componentDidUpdate
以完成我需要做的事情,但在我的例子中回调更方便,我讨厌留下这样的未解之谜。 :)