Repository navigation
Open
Labels
bugSomething isn't workingSomething isn't workingdependenciesPull requests that update a dependency filePull requests that update a dependency file
Description
peer는 React *이지만 코드는 React 19 전용 기능(use(Context), ref를 일반 prop으로 받기, callback ref cleanup)을 씁니다. 또 React ^19.3이 dependencies에 있어 React 18 앱에 React가 두 벌 설치될 수 있습니다.
전체 계획과 결정 사항은 추적 이슈(#682)에 있습니다. 조사 기준 커밋: 77daad74 (현재 main d0b84255).
결정에 따른 작업
- (필수) peer
^18 || ^19, dependencies에서 React 제거 - (필수)
use→useContext, 생성 styled 컴포넌트와 UI kit에 forwardRef, callback ref cleanup 대체 - (필수) React 18 fixture로 CI 검증(이슈 L의 테스트 인프라)
발견 항목
심각도: P0 = 흔한 사용에서 조용히 틀리거나 크래시, P1 = 흔한 패턴이 명시적 에러로 막히거나 드물게 조용히 틀림, P2 = 드문 경우·도구/문서 불일치, P3 = 있으면 좋음.
필수 (5)
- RT-05 (P0, CRASH) Declared React
*compatibility is false and can crash on React 18- 근거: both packages advertise
peerDependencies.react: "*"while also depending onreact:^19.3;useSelectanduseSteppercall React 19'suse(Context), Select relies on React 19 callback-ref cleanup, and public components rely on React 19 ref-as-prop. React 18 requiresforwardRefand does not support callback-ref cleanup: https://react.dev/reference/react/forwardRef and htt… - 수정 방향: Either require React
>=19and remove React from runtime dependencies, or use React-18-compatibleuseContext,forwardRef, and effect cleanup.
- 근거: both packages advertise
- RT-29 (P0, MISMATCH) Package metadata can install a second React while claiming any peer is supported
- 근거:
packages/components/package.jsonandpackages/react/package.jsonput React^19.3independencieswhile also declaring peerreact:"*". A React-18 application can satisfy the peer yet receive nested React 19, risking invalid-hook-call/renderer mismatches; the runtime itself uses React-19-only APIs. - 수정 방향: Remove React from runtime dependencies and set the truthful peer range (or eliminate React-19-only behavior and test all accepted majors).
- 근거:
- INF-23 (P1, MISMATCH) Package compatibility claims are unconstrained
- 근거: all manifests omit
engines; React/bundler/Next/WASM/ESLint peers are mostly*; React package depends on^19.3while peer says every React and ref behavior is untested. - 수정 방향: test and declare minimum/maximum host ranges and engines; avoid both a hard React dependency and unrestricted peer unless intentional.
- 근거: all manifests omit
- RT-06 (P1, MISMATCH) Public UI-kit components do not forward refs on React 18
- 근거: Button, Checkbox, Input, Radio, RadioGroup, Textarea, and Toggle are plain function components with no
forwardRef; Select/Stepper compound wrappers are likewise plain functions. Their HTML prop types imply normal ref usability, but React 18 strips function-component refs. - 수정 방향: Forward refs explicitly or narrow the supported React range/types to React 19 only.
- 근거: Button, Checkbox, Input, Radio, RadioGroup, Textarea, and Toggle are plain function components with no
- SC-13 (P1, WRONG) Generated wrappers do not forward refs on React 16.8-18
- 근거:
50-ref.tsxtransformsstyled.inputto a plainconst X = ({style,className,...rest}) => <input {...rest} .../>; noforwardRefis generated. On React versions supported by styled-components v5/v6 before React 19, arefis not an ordinary function-component prop, so callers receive no underlying input ref. Devup declares peerreact: "*"(packages/react/package.json:81… - 수정 방향: Generate
forwardRefwrappers for styled components when compatibility with React <=18 is claimed, or narrow peer/support policy to React 19+ and document the break.
- 근거:
권장 (1)
- INF-10 (P1, MISMATCH) WASM CommonJS export resolves to ESM
- 근거:
bindings/devup-ui-wasm/package.jsonistype: module; bothimportandrequirepoint topkg/index.js. - 수정 방향: ship a
.cjswrapper or remove the unsupported require condition.
- 근거:
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingdependenciesPull requests that update a dependency filePull requests that update a dependency file
Activity
chore: satisfy clippy assert_is_empty lint on Rust 1.99
fix(components): provide Select and Stepper context as React 18 does
chore: merge main into React 18 fixture CI
merge: update PR #722 with PR #711 and preserve eager ref targets
fix(extractor): bound forwardRef capture evaluation depth
Merge repaired PR 722 into test/react-18-fixture
test: merge updated forward-ref parent into React 18 fixture
fix(extractor): retain ordered guarded capture reads
test(extractor): cover finite selection rejection boundaries
fix(react,components): support React 18 peers and drop React 19-only …
fix(components): forward refs from the UI kit form components
fix(extractor): forward refs from generated styled components
test: build and drive a React 18 app in CI
owjs3901 commentedon Nov 15, 2026
main(
1160bf646)에 병합된 수정을 확인해 체크리스트를 갱신했습니다.새로 체크한 항목 (3건 + 결정 항목 2건)
^18 || ^19, dependencies에서 React 제거: fix(react,components): support React 18 peers and drop React 19-only APIs #720아직 열린 PR로만 다루는 항목: INF-23 (#940), RT-06 (#913: 남은 컴포넌트의 forwardRef)
수정이 확인되지 않은 항목: INF-10. main의
bindings/devup-ui-wasm/package.json은 여전히"type": "module"이고,require가./pkg/index.js를 가리킵니다.체크하지 않은 결정 항목:
use→useContext/forwardRef/callback ref cleanup (RT-06이 남아 있음)