akanjs 2.3.8-rc.5 → 2.3.9-rc.0
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/README.ko.md +3 -3
- package/README.md +3 -3
- package/package.json +1 -1
- package/ui/Load/View.tsx +8 -8
package/README.ko.md
CHANGED
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
SEO 웹, iOS/Android 앱 패키지, 서버, 데이터베이스 계약, 인프라 산출물, 문서화까지 함께 이어지는
|
|
10
10
|
Bun-first 풀스택 TypeScript 프레임워크입니다.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
<img width="563" height="720" alt="multi-platform-dev" src="https://github.com/user-attachments/assets/de2ec810-7b7f-4e9d-8e9e-e565e648fb45" />
|
|
13
|
+
|
|
14
|
+
하나의 Akan.js 코드베이스에서 서버 렌더링, 클라이언트 렌더링, 모바일 앱, 서버, 데이터베이스까지 한 개발 흐름 안에서 함께 움직입니다.
|
|
15
15
|
|
|
16
16
|
## 왜 Akan인가
|
|
17
17
|
|
package/README.md
CHANGED
|
@@ -8,9 +8,9 @@ No more framework assembly, duplicated declarations, or per-platform rewrites. A
|
|
|
8
8
|
full-stack TypeScript framework where business intent is written once, then compiled into SEO web surfaces,
|
|
9
9
|
iOS and Android app packages, servers, database contracts, infrastructure artifacts, and documentation.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
<img width="563" height="720" alt="multi-platform-dev" src="https://github.com/user-attachments/assets/de2ec810-7b7f-4e9d-8e9e-e565e648fb45" />
|
|
12
|
+
|
|
13
|
+
A single Akan.js codebase keeps server rendering, client rendering, mobile apps, server, and database moving in one development flow.
|
|
14
14
|
|
|
15
15
|
## Why Akan
|
|
16
16
|
|
package/package.json
CHANGED
package/ui/Load/View.tsx
CHANGED
|
@@ -37,7 +37,7 @@ function Render<T extends string, Full extends { id: string }>({
|
|
|
37
37
|
loading,
|
|
38
38
|
renderView,
|
|
39
39
|
}: RenderProps<T, Full>) {
|
|
40
|
-
const
|
|
40
|
+
const loadedId = useRef<string | null>(null);
|
|
41
41
|
const storeUse = st.use as { [key: string]: () => unknown };
|
|
42
42
|
const storeGet = st.get as unknown as <T>() => { [key: string]: T };
|
|
43
43
|
const { refName } = view;
|
|
@@ -51,16 +51,16 @@ function Render<T extends string, Full extends { id: string }>({
|
|
|
51
51
|
model?.id === modelObj.id &&
|
|
52
52
|
storeGet<Date>()[`${refName}ViewAt`].getTime() >= modelViewAt.getTime()
|
|
53
53
|
)
|
|
54
|
-
|
|
54
|
+
loadedId.current = modelObj.id;
|
|
55
55
|
|
|
56
56
|
const modelInit = useMemo(() => {
|
|
57
|
-
if (loaded.current) return model;
|
|
58
57
|
const modelObj = view[`${refName}Obj`] as Full;
|
|
58
|
+
if (loadedId.current === modelObj.id) return model;
|
|
59
59
|
return new cnst.full().set(modelObj) as unknown as Full;
|
|
60
|
-
}, []);
|
|
60
|
+
}, [view]);
|
|
61
61
|
|
|
62
62
|
useEffect(() => {
|
|
63
|
-
if (
|
|
63
|
+
if (loadedId.current === modelObj.id) return;
|
|
64
64
|
const modelViewAt = view[`${refName}ViewAt`] as Date;
|
|
65
65
|
st.set({
|
|
66
66
|
[refName]: modelInit,
|
|
@@ -68,10 +68,10 @@ function Render<T extends string, Full extends { id: string }>({
|
|
|
68
68
|
[`${refName}Modal`]: "view",
|
|
69
69
|
[`${refName}ViewAt`]: modelViewAt,
|
|
70
70
|
});
|
|
71
|
-
|
|
72
|
-
}, []);
|
|
71
|
+
loadedId.current = modelObj.id;
|
|
72
|
+
}, [modelViewAt, modelObj.id]);
|
|
73
73
|
|
|
74
|
-
const renderModel =
|
|
74
|
+
const renderModel = loadedId.current === modelObj.id ? model : modelInit;
|
|
75
75
|
|
|
76
76
|
return noDiv && renderModel ? (
|
|
77
77
|
<>{renderView(renderModel)}</>
|