Skip to content

Latest commit

Β 

History

History
187 lines (135 loc) Β· 6.46 KB

File metadata and controls

187 lines (135 loc) Β· 6.46 KB

PR 6a: λ¬Έμ„œ μ½”λ“œ 예제 μˆ˜μ •

μ„ ν–‰ PR: PR 3, PR 4 (API 승격 μ™„λ£Œ ν›„) PR #695 ENvironmentSet 리뷰 반영 (FEP-2129)

λͺ©μ 

PR #695μ—μ„œ ENvironmentSet이 μ§€μ ν•œ λ¬Έμ„œ μ½”λ“œ 예제 였λ₯˜λ₯Ό μˆ˜μ •ν•œλ‹€. (μ‚­μ œ/rename은 PR 6b둜, structured-activity λ¬Έμ„œ κ°œμ„ μ€ PR 6c둜 뢄리.)

μž‘μ—…

1. stackflow() λ°˜ν™˜κ°’μ—μ„œ useFlow destructuring 제거

μ‹€μ œ StackflowOutput νƒ€μž… (integrations/react/src/stackflow.tsx:46-50):

export type StackflowOutput = {
  Stack: StackComponentType;
  actions: Actions;
  stepActions: StepActions<ActivityBaseParams>;
};

useFlowλŠ” λ°˜ν™˜κ°’μ— ν¬ν•¨λ˜μ§€ μ•ŠμœΌλ©°, @stackflow/reactμ—μ„œ 독립 ν›…μœΌλ‘œ 직접 importν•΄μ•Ό ν•œλ‹€.

μˆ˜μ • 파일:

파일 라인
docs/pages/docs/get-started/installation.en.mdx L40, L70
docs/pages/docs/get-started/installation.ko.mdx L40, L71
docs/pages/docs/get-started/activity.en.mdx L81
docs/pages/docs/get-started/activity.ko.mdx L84
docs/pages/docs/advanced/history-sync.en.mdx L43
docs/pages/docs/advanced/history-sync.ko.mdx L43
docs/pages/docs/migration-v2.en.mdx L52 ("After")
docs/pages/docs/migration-v2.ko.mdx L52 ("λ³€κ²½ ν›„")

μˆ˜μ • λ°©ν–₯:

- const { Stack, useFlow } = stackflow(...)
+ const { Stack } = stackflow(...)
+ import { useFlow } from "@stackflow/react";

2. ActivityComponentType v1 β†’ v2 νƒ€μž… νŒ¨ν„΄ λ³€κ²½

v2 ActivityComponentType은 params 객체 νƒ€μž… λŒ€μ‹  activity 이름 string literal을 λ°›λŠ”λ‹€. κΈ°μ‘΄ params 객체 방식은 ActivityComponentTypeByParams둜 rename.

μˆ˜μ • 파일:

  • docs/pages/docs/get-started/navigating-activities.en.mdx L141-145
  • docs/pages/docs/get-started/navigating-activities.ko.mdx L143-147

μˆ˜μ • λ°©ν–₯:

- type ArticleParams = { title: string; };
- const Article: ActivityComponentType<ArticleParams> = ({ params }) => {
+ declare module "@stackflow/config" {
+   interface Register {
+     Article: { title: string };
+   }
+ }
+ const Article: ActivityComponentType<"Article"> = ({ params }) => {

3. ActivityLoaderArgs import 경둜 였λ₯˜

ActivityLoaderArgsλŠ” @stackflow/configμ—μ„œλ§Œ exportλœλ‹€ (config/src/index.ts:4). @stackflow/reactμ—μ„œλŠ” λ‚΄λΆ€ μ‚¬μš©λ§Œ ν•˜λ©° re-exportν•˜μ§€ μ•ŠλŠ”λ‹€.

μˆ˜μ • 파일:

파일 라인
docs/pages/docs/advanced/loader-api.en.mdx L6
docs/pages/docs/advanced/loader-api.ko.mdx L6
docs/pages/docs/advanced/preloading.en.mdx L12
docs/pages/docs/advanced/preloading.ko.mdx L12

loader-api.{en,ko}.mdxλŠ” PR 6bμ—μ„œ μ‚­μ œ μ˜ˆμ •. PR 6b와 λ¨Έμ§€ μ‹œμ  쑰율 ν•„μš”.

μˆ˜μ • λ°©ν–₯:

- import { ActivityLoaderArgs, useLoaderData } from "@stackflow/react";
+ import type { ActivityLoaderArgs } from "@stackflow/config";
+ import { useLoaderData } from "@stackflow/react";

4. @stackflow/link API 레퍼런슀 μˆ˜μ •

4-a. animate κΈ°λ³Έκ°’ μ„€λͺ… 였λ₯˜

ν˜„μž¬ λ¬Έμ„œ (link.en.mdx:45, link.ko.mdx:45):

"If not provided, it defaults to no animation."

μ‹€μ œ λ™μž‘ (extensions/link/src/Link.tsx:89-99): animateλ₯Ό μƒλž΅ν•˜λ©΄ 빈 μ˜΅μ…˜ {}κ°€ μ „λ‹¬λ˜μ–΄ push/replace의 κΈ°λ³Έ λ™μž‘(μ• λ‹ˆλ©”μ΄μ…˜ ON)이 μ μš©λœλ‹€. μ„€λͺ…을 "κΈ°λ³Έ μ• λ‹ˆλ©”μ΄μ…˜ 적용"으둜 μˆ˜μ •.

4-b. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” urlPatternOptions prop 제거

μ‹€μ œ LinkProps (Link.tsx:24-31):

export interface LinkProps<K extends RegisteredActivityName> extends AnchorProps {
  ref?: React.RefObject<HTMLAnchorElement>;
  activityName: K;
  activityParams: InferActivityParams<K>;
  animate?: boolean;
  replace?: boolean;
}

urlPatternOptionsλŠ” config.historySyncμ—μ„œ λ‚΄λΆ€μ μœΌλ‘œ μ‚¬μš©λ  뿐 μ‚¬μš©μž prop이 μ•„λ‹ˆλ‹€.

μˆ˜μ • 파일:

  • docs/pages/api-references/plugins/link.en.mdx L47 β€” prop λ¬Έμ„œ 제거
  • docs/pages/api-references/plugins/link.ko.mdx L47 β€” prop λ¬Έμ„œ 제거

4-c. Link ref νƒ€μž… 였λ₯˜

λ¬Έμ„œμ—λŠ” React.ForwardedRef<HTMLAnchorElement>둜 κΈ°μž¬λ˜μ–΄ μžˆμœΌλ‚˜ μ‹€μ œλŠ” React.RefObject<HTMLAnchorElement>.

μˆ˜μ • 파일:

  • docs/pages/api-references/plugins/link.en.mdx L48
  • docs/pages/api-references/plugins/link.ko.mdx L48

5. plugin-history-sync λ¬Έμ„œ v2 μ—…λ°μ΄νŠΈ

ν˜„μž¬ v1 API νŒ¨ν„΄μ„ κ·ΈλŒ€λ‘œ μ‚¬μš© 쀑:

  • const { Stack, useFlow } = stackflow({ activities: { ... } })
  • routes μ˜΅μ…˜ (v2μ—μ„œλŠ” config에 μ„ μ–Έ)

v2 config-first νŒ¨ν„΄μœΌλ‘œ μ „λ©΄ μ—…λ°μ΄νŠΈ.

μˆ˜μ • 파일:

  • docs/pages/api-references/plugins/plugin-history-sync.en.mdx
  • docs/pages/api-references/plugins/plugin-history-sync.ko.mdx

6. migration-v2 λ¬Έμ„œ κ°œμ„ 

6-a. 5단계 "Before" μ˜ˆμ‹œ ν™•μž₯

ν˜„μž¬:

import { useFlow } from "./stackflow";

./stackflowλΌλŠ” 파일 κ²½λ‘œκ°€ λ¬΅μ‹œμ μ΄μ–΄μ„œ 이해가 μ–΄λ ΅λ‹€. stackflow() νŒ©ν† λ¦¬μ—μ„œ useFlowλ₯Ό destructuringν•˜μ—¬ exportν•˜λŠ” 전체 λ§₯락을 보여주도둝 ν™•μž₯.

6-b. API λŒ€μ‘ν‘œμ—μ„œ ./stackflow β†’ stackflow() νŒ©ν† λ¦¬ ν‘œν˜„μœΌλ‘œ λ³€κ²½

ν˜„μž¬:

| `useFlow()` from `./stackflow` | `useFlow()` from `@stackflow/react` |

파일 경둜 λŒ€μ‹  stackflow() νŒ©ν† λ¦¬λΌλŠ” ν‘œν˜„μœΌλ‘œ μˆ˜μ •.

μˆ˜μ • 파일:

  • docs/pages/docs/migration-v2.en.mdx
  • docs/pages/docs/migration-v2.ko.mdx

7. write-plugin λ¬Έμ„œ μˆ˜μ •

7-a. μ˜€νƒ€

write-plugin.ko.mdx:262: Gν˜„μž¬ μŠ€νƒμ˜ μƒνƒœλ₯Ό κ°€μ Έμ˜¬ 수 μžˆμ–΄μš” β†’ ν˜„μž¬ μŠ€νƒμ˜ μƒνƒœλ₯Ό κ°€μ Έμ˜¬ 수 μžˆμ–΄μš”

7-b. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” lifecycle hook 이름 μˆ˜μ •

initialPushedEventλŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ν›…. μ˜¬λ°”λ₯Έ 이름은 overrideInitialEvents.

μˆ˜μ • 파일:

  • docs/pages/docs/advanced/write-plugin.en.mdx L261, L272
  • docs/pages/docs/advanced/write-plugin.ko.mdx L269, L280

확인 사항

  • μˆ˜μ •λœ λͺ¨λ“  νŒŒμΌμ—μ„œ useFlowκ°€ @stackflow/reactμ—μ„œ 직접 import
  • stackflow() destructuring에 useFlow 미포함
  • ActivityComponentType<ParamsObject> β†’ ActivityComponentType<"ActivityName">
  • ActivityLoaderArgs import κ²½λ‘œκ°€ @stackflow/config둜 μˆ˜μ •
  • animate κΈ°λ³Έκ°’ μ„€λͺ… μ •μ •
  • urlPatternOptions prop λ¬Έμ„œ 제거
  • Link ref νƒ€μž… React.RefObject둜 μˆ˜μ •
  • plugin-history-sync λ¬Έμ„œ v2 νŒ¨ν„΄
  • migration-v2 Before μ˜ˆμ‹œ/λŒ€μ‘ν‘œ μˆ˜μ •
  • write-plugin μ˜€νƒ€/lifecycle hook 이름 μˆ˜μ •
  • EN/KO μ–‘μͺ½ 동기화
  • λ¬Έμ„œ μ‚¬μ΄νŠΈ 둜컬 λΉŒλ“œ 정상