Yon*_*Noh 7 javascript reactjs
在React文档中,forceUpdate有一个参数callback。
这就像setState设置状态后调用的第二个参数吗?或者说那是为了什么?
我找不到任何相关的文章。
是不是像setState的第二个参数,在设置状态后调用?
是的。答案就在React源代码中。如果你看一下react/src/ReactBaseClasses你会发现setState它的forceUpdate定义如下:
Component.prototype.setState = function(partialState, callback) {
// ...
this.updater.enqueueSetState(this, partialState, callback, 'setState');
};
Component.prototype.forceUpdate = function(callback) {
this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');
};
Run Code Online (Sandbox Code Playgroud)
如果我们继续enqueueSetState实施enqueueForceUpdate,我们会看到:
const classComponentUpdater = {
isMounted,
enqueueSetState(inst, payload, callback) {
const fiber = getInstance(inst);
const currentTime = requestCurrentTimeForUpdate();
const suspenseConfig = requestCurrentSuspenseConfig();
const expirationTime = computeExpirationForFiber(
currentTime,
fiber,
suspenseConfig,
);
const update = createUpdate(expirationTime, suspenseConfig);
update.payload = payload;
if (callback !== undefined && callback !== null) {
// ...
update.callback = callback;
}
enqueueUpdate(fiber, update);
scheduleWork(fiber, expirationTime);
},
enqueueReplaceState(inst, payload, callback) {
...
},
enqueueForceUpdate(inst, callback) {
const fiber = getInstance(inst);
const currentTime = requestCurrentTimeForUpdate();
const suspenseConfig = requestCurrentSuspenseConfig();
const expirationTime = computeExpirationForFiber(
currentTime,
fiber,
suspenseConfig,
);
const update = createUpdate(expirationTime, suspenseConfig);
update.tag = ForceUpdate;
if (callback !== undefined && callback !== null) {
// ...
update.callback = callback;
}
enqueueUpdate(fiber, update);
scheduleWork(fiber, expirationTime);
},
};
Run Code Online (Sandbox Code Playgroud)
enqueueSetState和之间的差异enqueueForceUpdate在于update.payload和update.tag。
所以是的, callBack 具有与第二个参数forceUpdate相同的行为。setState
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |