@nine-lab/nine-mu 0.1.382 โ 0.1.383
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/nine-mu.js +29 -17
- package/dist/nine-mu.js.map +1 -1
- package/dist/nine-mu.umd.js +1 -1
- package/dist/nine-mu.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/components/hook/NineHook.js +34 -16
package/package.json
CHANGED
|
@@ -208,29 +208,47 @@ class NineExceptionHook extends React.Component {
|
|
|
208
208
|
export function NineHook({ menuUrl, views, error404, onCatch, fallback, styles, containerStyle }) {
|
|
209
209
|
const [menuData, setMenuData] = useState([]);
|
|
210
210
|
|
|
211
|
-
// ๐ฏ
|
|
212
|
-
|
|
211
|
+
// ๐ฏ 1. ๋ฐํ์ ๋์ fetch ํจ์ ๋ถ๋ฆฌ
|
|
212
|
+
const fetchRoutes = async () => {
|
|
213
213
|
if (!menuUrl) return;
|
|
214
|
+
try {
|
|
215
|
+
// ํ์์คํฌํ(?t=...)๋ฅผ ์ฃผ์ด ๋ธ๋ผ์ฐ์ ์บ์๋ฅผ ๋ฌด์กฐ๊ฑด ํ๊ดดํ๊ณ ํ๋๋์คํฌ์ ๋ ๊ฒ ํ์ผ ๋ด์ฉ์ ๊ฐ์ ธ์ด
|
|
216
|
+
const response = await fetch(`${menuUrl}?t=${Date.now()}`);
|
|
217
|
+
if (response.ok) {
|
|
218
|
+
const data = await response.json();
|
|
214
219
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
setMenuData(data);
|
|
222
|
-
}
|
|
223
|
-
} catch (e) {
|
|
224
|
-
console.error("[Nine-Library] ๋ฐํ์ ๋ฉ๋ด ๋๊ธฐํ ์คํจ:", e);
|
|
220
|
+
// ๐ก ๊ธฐ์กด ๋ฐ์ดํฐ์ ์๋ก ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅผ ๋๋ง ์ํ๋ฅผ ์
๋ฐ์ดํธํ์ฌ ๋ฌดํ ๋ฃจํ ๋ฐฉ์ง
|
|
221
|
+
setMenuData((prev) => {
|
|
222
|
+
if (JSON.stringify(prev) === JSON.stringify(data)) return prev;
|
|
223
|
+
console.log("๐ฅ [Nine-Library] AI์ ์ํ routes.json ๋ณ๊ฒฝ ๊ฐ์ง -> ๋ฉ๋ด ๋ฐ ๋ผ์ฐํฐ ์ค์๊ฐ ๋๊ธฐํ ์๋ฃ");
|
|
224
|
+
return data;
|
|
225
|
+
});
|
|
225
226
|
}
|
|
226
|
-
}
|
|
227
|
+
} catch (e) {
|
|
228
|
+
console.error("[Nine-Library] ๋ฐํ์ ๋ฉ๋ด ๋๊ธฐํ ์คํจ:", e);
|
|
229
|
+
}
|
|
230
|
+
};
|
|
227
231
|
|
|
232
|
+
// ๐ฏ 2. ์ค์๊ฐ ๋ฐ์ํ ํธ๋ฆฌ๊ฑฐ ์์ง ์ฒด์ธ
|
|
233
|
+
useEffect(() => {
|
|
234
|
+
// ์ต์ด ๋ก๋ ์ ์คํ
|
|
228
235
|
fetchRoutes();
|
|
229
236
|
|
|
230
|
-
//
|
|
231
|
-
|
|
237
|
+
// ๐ก ํธ๋ฆฌ๊ฑฐ A: AI๊ฐ ์ฝ๋๋ฅผ ๊ณ ์น๊ณ ์ฃผ์๋ฅผ ๋ฐ๊ฟจ์ ๋(popstate/click) ์ฆ์ ๋๊ธฐํ
|
|
238
|
+
window.addEventListener('popstate', fetchRoutes);
|
|
239
|
+
document.addEventListener('click', fetchRoutes, true);
|
|
240
|
+
|
|
241
|
+
// ๐ก ํธ๋ฆฌ๊ฑฐ B: ์ฌ์ฉ์๊ฐ ๊ฐ๋งํ ์์ด๋ AI๊ฐ ๋ฐฑ์๋์์ ํ์ผ์ ์์ ํ๋ฉด 3์ด๋ง๋ค ์๋ ์ฒดํฌ (ํด๋ง)
|
|
242
|
+
const intervalId = setInterval(fetchRoutes, 3000);
|
|
243
|
+
|
|
244
|
+
return () => {
|
|
245
|
+
window.removeEventListener('popstate', fetchRoutes);
|
|
246
|
+
document.removeEventListener('click', fetchRoutes, true);
|
|
247
|
+
clearInterval(intervalId);
|
|
248
|
+
};
|
|
249
|
+
}, [menuUrl]); // menuUrl์ด ์ฃผ์
๋๋ฉด ์ด๋ฒคํธ์ ํ์ด๋จธ๊ฐ ์์ ํ๊ฒ ๋ฐ์ธ๋ฉ๋ฉ๋๋ค.
|
|
232
250
|
|
|
233
|
-
// ๋ฐ์ดํฐ๊ฐ
|
|
251
|
+
// ๋ฐ์ดํฐ๊ฐ ๋ก๋๋๊ณ ์ ์ ๋๋ฉด ๋์ ๋ผ์ฐํธ ๋งคํธ๋ฆญ์ค ์์ฑ
|
|
234
252
|
const dynamicRoutes = createDynamicRoutes(menuData, views, error404);
|
|
235
253
|
|
|
236
254
|
return React.createElement(
|