Closed dinohan closed 1 year ago
Latest commit: b1363af09812aba82816c10dd9c16d4dacf1fedd
The changes in this PR will be included in the next version bump.
Not sure what this means? Click here to learn what changesets are.
Click here if you're a maintainer who wants to add another changeset to this PR
Patch coverage: 100.00
% and project coverage change: +0.02
:tada:
Comparison is base (
542a624
) 78.18% compared to head (b1363af
) 78.21%.
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.
'Alpha'라는 접두어가 이름만 봐서는 의미를 알아채기 어려워 보이긴 하는데 Lite 이런건 어떨까요?
'Alpha'라는 접두어가 이름만 봐서는 의미를 알아채기 어려워 보이긴 하는데 Lite 이런건 어떨까요?
새 Provider 이름을 어떻게 지을까 고민하다가 Alpha-
라는 prefix를 쓰는 다른 작업들을 참고하여 작성했습니다.
기존의 BezierComponent는 장기적으로는 deprecate되어야 할 것 같습니다. AlphaBezierProvider가 진짜 BezierProvider가 되고, EnableCSSHoudini는 별도로 import해서 실행하는 형태가 최종 목표입니다.
기존의 레거시 컴포넌트를 대체하는데, breaking change가 있는 컴포넌트 네이밍에 Alpha-
를 쓰는 것 같아 따르기로 했습니다.
처음 이런 네이밍을 사용하신 게 @sungik-choi 신데, 처음 AlphaCenter를 추가하실 때 의도가 이와 같은지 확인 부탁드립니다.
생각해보니 장기적으로 기존 BezierProvider를 없애고자 한다면 이 PR에서 추가 작업이 필요하겠네요!
EnableCSSHoudini
BezierProvider
components as deprecated처음 이런 네이밍을 사용하신 게 @sungik-choi 신데, 처음 AlphaCenter를 추가하실 때 의도가 이와 같은지 확인 부탁드립니다.
'기존의 레거시 컴포넌트를 대체하는데, breaking change가 있는 컴포넌트 네이밍에 Alpha-를 쓰는 것 같아 따르기로 했습니다.' 는 아닙니다. 기존 컴포넌트 대체 여부와는 상관 없이, 불안정하지만 미리 사용성을 테스트해보고 싶은 컴포넌트의 네이밍 앞에 Alpha**
를 붙이는 방식을 시도해보고 있어요. 방식은 Shopify Polaris를 참고했습니다.
breaking change가 있더라도 새로운 컴포넌트가 레거시 컴포넌트를 완벽히 대체할 수 있다고 판단하면 모두 대체하고, 극소수의 엣지 케이스를 커버할 수 없다고 판단하면 레거시 컴포넌트를 남겨두는 방식으로 작업하고 있어요.
<BezierExperimentalProvider smoothCorners> // smoothCorners={{ Avatar: true }} ?
<BezierProvider foundation={foundation}>
<App>
<BezierProvider foundation={LightFoundation}>
<Inner />
</BezierProvider>
</App>
</BezierProvider>
</BezierExperimentalProvider>
이런 식의 설계는 어떨까요?
smoothCorners
prop만 추가하는 거라면, 내부 컨텍스트에서 플래그를 off 하더라도 적용되지 않음이렇게 변경할 경우 enableSmoothCorners
, EnableCSSHoudini
를 React lifecycle 안에 포함시켜야하며 Avatar의 styled-components에 prop으로 기능 On/Off 플래그를 전달해야 합니다(현재는 .styled에서 직접 모듈을 import해서 참조)
더 나아가서 'paintWorklet' in CSS
조건을 충족했을 경우에만 lazy import 할 수도 있을 거 같은데, 이건 빌드 설정과도 연관이 깊어서 리서치가 필요할 거 같아요.
이런 식의 설계는 어떨까요? ...
BezierExperimentalProvider
은 smooth corner 뿐만 아니라 다른 실험적인 기능을 끄고 켜는 역할을 하는 Provider 같습니다.
아마 Context와 함께 const { smoothCorner } = useExperimental()
같은 hook이 동반되겠군요.
그렇다면 prop을 boolean에서 더 확장해서 아래와 같이 사용하는 것이 괜찮을 것 같습니다.
const smoothCorners = new SmoothCorners()
<BezierExperimentalProvider
smoothCorners={smoothCorners}
>
<BezierProvider foundation={foundation}>
<App>
<BezierProvider foundation={LightFoundation}>
<Inner />
</BezierProvider>
</App>
</BezierProvider>
</BezierExperimentalProvider>
이렇게 하면 나중에 새로운 실험적 기능 B가 추가 되었을 때 smoothCorner는 import하지 않고 B만 import 하는 등, 기능 확장 시 treeshaking에 더 유리할 것 같습니다.
Self Checklist
CODEOWNERS
file.Related Issue
Fixes #1301
Summary
BezierProvider를 대체할 수 있는 AlphaBezierProvider를 추가합니다.
Details
1301 에 자세한 문제 상황을 서술하였습니다. 요약하자면,
Breaking change or not (Yes/No)
References
1301
603