Skip to content

Commit 2f99f0b

Browse files
committed
use the ref directly
1 parent 729098d commit 2f99f0b

File tree

3 files changed

+41
-41
lines changed

3 files changed

+41
-41
lines changed

src/renderer/components/UserAppUI.jsx

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,13 @@ import useConsoleLog from '../workspace/useConsoleLog';
66

77
export default function () {
88
const { workspace, scriptVersionId } = useWorkspace();
9-
const [webview, setWebview] = useState();
9+
const webviewRef = useRef(null);
1010
const [attached, setAttached] = useState(false);
1111
const { addConsoleLog } = useConsoleLog();
12-
const webviewRef = useCallback((node) => {
13-
setWebview(node);
14-
}, []);
1512

1613
useEffect(() => {
17-
if (workspace?.enabled && webview && attached) {
18-
webview?.reload();
14+
if (workspace?.enabled && webviewRef.current && attached) {
15+
webviewRef.current?.reload();
1916
}
2017
}, [scriptVersionId, workspace?.enabled, attached]);
2118

@@ -31,15 +28,15 @@ export default function () {
3128

3229
const handleDidAttach = () => {
3330
setAttached(true);
34-
//webview.openDevTools();
31+
//webviewRef.current.openDevTools();
3532
};
3633

3734
function handleConsoleMessage(log) {
3835
addConsoleLog(Decode(log));
3936
}
4037

41-
useEventListener(webview, 'ipc-message', handleIpcMessage);
42-
useEventListener(webview, 'did-attach', handleDidAttach);
38+
useEventListener(webviewRef, 'ipc-message', handleIpcMessage);
39+
useEventListener(webviewRef, 'did-attach', handleDidAttach);
4340

4441
return (
4542
<div style={{ width: '100%', height: '100%' }}>

src/renderer/components/webbrowser/WebView.jsx

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,48 +13,48 @@ import { sleep } from '../../util';
1313
function WebView({ tabId, onIpcMessage }, ref) {
1414
const { defaultURL, updateTab } = useWebView({ tabId });
1515
const [isDomReady, setDomReady] = useState(false);
16-
const [webview, setWebview] = useState();
16+
const webviewRef = useRef(null);
1717

1818
useImperativeHandle(
1919
ref,
2020
() => ({
2121
loadURL: async (url, options) => {
2222
try {
23-
return await webview?.loadURL(url, options);
23+
return await webviewRef.current?.loadURL(url, options);
2424
} catch (e) {
2525
console.info(e);
2626
}
2727
},
2828
goBack: () => {
29-
return webview?.goBack();
29+
return webviewRef.current?.goBack();
3030
},
3131
goForward: () => {
32-
return webview?.goForward();
32+
return webviewRef.current?.goForward();
3333
},
3434
reload: () => {
35-
return webview?.reload();
35+
return webviewRef.current?.reload();
3636
},
3737
stop: () => {
38-
return webview?.stop();
38+
return webviewRef.current?.stop();
3939
},
4040
canGoBack: () => {
41-
return webview?.canGoBack();
41+
return webviewRef.current?.canGoBack();
4242
},
4343
canGoForward: () => {
44-
return webview?.canGoForward();
44+
return webviewRef.current?.canGoForward();
4545
},
4646
openDevTools: async () => {
4747
// TODO: use message queue instead
4848
if (!isDomReady) await sleep(300);
49-
webview?.openDevTools();
49+
webviewRef.current?.openDevTools();
5050
},
5151
closeDevTools: async () => {
5252
// TODO: use message queue instead
5353
if (!isDomReady) await sleep(300);
54-
webview?.closeDevTools();
54+
webviewRef.current?.closeDevTools();
5555
},
5656
sendToFrame: (frameId, channel, ...args) => {
57-
return webview?.sendToFrame(frameId, channel, ...args);
57+
return webviewRef.current?.sendToFrame(frameId, channel, ...args);
5858
},
5959
}),
6060
[isDomReady]
@@ -73,7 +73,7 @@ function WebView({ tabId, onIpcMessage }, ref) {
7373
};
7474

7575
const handleStopLoading = () => {
76-
updateTab(tabId, { url: webview.getURL(), loading: false });
76+
updateTab(tabId, { url: webviewRef.current.getURL(), loading: false });
7777
};
7878

7979
const handleFailure = (event) => {
@@ -85,8 +85,8 @@ function WebView({ tabId, onIpcMessage }, ref) {
8585

8686
const handleDidStartNavigate = () => {
8787
updateTab(tabId, {
88-
canGoBack: webview.canGoBack(),
89-
canGoForward: webview.canGoForward(),
88+
canGoBack: webviewRef.current.canGoBack(),
89+
canGoForward: webviewRef.current.canGoForward(),
9090
});
9191
};
9292

@@ -98,20 +98,16 @@ function WebView({ tabId, onIpcMessage }, ref) {
9898
updateTab(tabId, { title });
9999
};
100100

101-
const webviewRef = useCallback((node) => {
102-
setWebview(node);
103-
}, []);
104-
105-
useEventListener(webview, 'ipc-message', onIpcMessage);
106-
useEventListener(webview, 'dom-ready', handleDomReady);
107-
useEventListener(webview, 'will-navigate', handleChangeURL);
108-
useEventListener(webview, 'did-start-loading', handleStartLoading);
109-
useEventListener(webview, 'did-stop-loading', handleStopLoading);
110-
useEventListener(webview, 'did-finish-load', handleStopLoading);
111-
useEventListener(webview, 'did-start-navigation', handleDidStartNavigate);
112-
useEventListener(webview, 'did-fail-load', handleFailure);
113-
useEventListener(webview, 'did-attach', handleDidAttach);
114-
useEventListener(webview, 'page-title-updated', handlePageTitleUpdated);
101+
useEventListener(webviewRef, 'ipc-message', onIpcMessage);
102+
useEventListener(webviewRef, 'dom-ready', handleDomReady);
103+
useEventListener(webviewRef, 'will-navigate', handleChangeURL);
104+
useEventListener(webviewRef, 'did-start-loading', handleStartLoading);
105+
useEventListener(webviewRef, 'did-stop-loading', handleStopLoading);
106+
useEventListener(webviewRef, 'did-finish-load', handleStopLoading);
107+
useEventListener(webviewRef, 'did-start-navigation', handleDidStartNavigate);
108+
useEventListener(webviewRef, 'did-fail-load', handleFailure);
109+
useEventListener(webviewRef, 'did-attach', handleDidAttach);
110+
useEventListener(webviewRef, 'page-title-updated', handlePageTitleUpdated);
115111

116112
return (
117113
<webview

src/renderer/hooks/useEventListener.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,22 @@ export default function useEventListener(emitter, eventName, handler, options) {
99

1010
useEffect(
1111
() => {
12-
const isSupported = emitter && emitter.addEventListener;
13-
if (!isSupported) return;
12+
let localEmitter = emitter?.current;
13+
let isSupported = localEmitter && localEmitter.addEventListener;
14+
if (!isSupported) {
15+
localEmitter = emitter;
16+
isSupported = localEmitter && localEmitter.addEventListener;
17+
}
18+
if (!isSupported) {
19+
return;
20+
}
1421

1522
const eventListener = (event) =>
1623
savedHandler.current && savedHandler.current(event);
17-
emitter.addEventListener(eventName, eventListener, options);
24+
localEmitter.addEventListener(eventName, eventListener, options);
1825

1926
return () => {
20-
emitter.removeEventListener(eventName, eventListener);
27+
localEmitter.removeEventListener(eventName, eventListener);
2128
};
2229
},
2330
[eventName, emitter] // Re-run if eventName or emitter changes

0 commit comments

Comments
 (0)