一旦我超出范圍,從事件中,我需要繼續參考在父范圍中宣告的變數。在下面的代碼中,fitAddon
. 為了防止 JS 的 GC 清理我的變數,我需要像下面這樣保持它的全域嗎?這對我來說不是很清楚。
// do I need to keep this to use in handleResize() event or
// it would be fine if it was local, i.e., same scope as
// it was initialized?
let fitAddon: FitAddon;
export const Terminal = () => {
const id = 'xterm-container';
useEffect(() => {
const terminal = new TerminalType({
cursorBlink: true,
cursorStyle: window.api.isWindows ? "bar" : "underline",
cols: DefaultTerminalSize.cols,
rows: DefaultTerminalSize.rows,
});
fitAddon = new FitAddon();
terminal.loadAddon(fitAddon);
terminal.open(document.getElementById(id) as HTMLElement);
fitAddon.fit();
function handleResize() {
fitAddon.fit();
}
window.addEventListener('resize', handleResize);
return () => {
return window.removeEventListener('resize', handleResize);
}
}, []);
return (
<div id={id}></div>
)
}
uj5u.com熱心網友回復:
不,你沒有。
只要監聽器存在:
window.addEventListener('resize', handleResize);
回呼不會被垃圾收集。由于回呼參考fitAddon
,fitAddon
也不會被垃圾收集,無論它在哪里宣告。因此,請隨意在效果回呼中宣告它。
const fitAddon = new FitAddon();
terminal.loadAddon(fitAddon);
// ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/495397.html