@@ -1293,6 +1293,7 @@ function navigate(url) {
12931293
12941294` url ` 이 변경되면, ` <ViewTransition> ` 과 새로운 라우트가 렌더링됩니다. ` <ViewTransition> ` 이 ` startTransition ` 내부에서 업데이트되었으므로, ` <ViewTransition> ` 이 애니메이션을 위해 활성화됩니다.
12951295
1296+
12961297기본적으로 View Transitions에는 브라우저의 기본 크로스 페이드 애니메이션이 포함되어 있습니다. 이를 예시에 적용하면, 페이지 간을 이동할 때마다 크로스 페이드 애니메이션이 실행됩니다.
12971298
12981299<Sandpack >
@@ -2493,7 +2494,7 @@ root.render(
24932494< / ViewTransition>
24942495```
24952496
2496- 그리고 [ 뷰 트랜지션 클래스] ( /reference/react/ViewTransition#view-transition-class ) 를 사용해서 CSS에서 ` slow-fade ` 를 정의합니다:
2497+ 그리고 [ 뷰 트랜지션 클래스] ( /reference/react/ViewTransition#view-transition-class ) 를 사용해서 CSS에서 ` slow-fade ` 를 정의합니다.
24972498
24982499``` css
24992500::view-transition-old(.slow-fade ) {
@@ -4935,7 +4936,7 @@ Transition Types을 사용하면 `<ViewTransition>`에 Props를 통해 커스텀
49354936
49364937``` css
49374938::view-transition-old(.slide-forward ) {
4938- /* 앞으로 전환할 때 "old" 페이지는 왼쪽으로 슬라이드되어 나가야 합니다. */
4939+ /* 앞으로 전환할 때 "old" 페이지는 왼쪽으로 슬라이드되어 나가야 합니다. */
49394940 animation : ...
49404941}
49414942
@@ -6094,7 +6095,7 @@ ul {
60946095``` css src/animations.css
60956096/* 트랜지션 타입에 의해 추가된 View Transition 클래스용 애니메이션 */
60966097::view-transition-old(.slide-forward ) {
6097- /* 앞으로 전환할 때 "old" 페이지는 왼쪽으로 슬라이드되어 나가야 합니다. */
6098+ /* 앞으로 전환할 때 "old" 페이지는 왼쪽으로 슬라이드되어 나가야 합니다. */
60986099 animation : 150ms cubic-bezier (0.4 , 0 , 1 , 1 ) both fade-out,
60996100 400ms cubic-bezier (0.4 , 0 , 0.2 , 1 ) both slide-to-left;
61006101}
@@ -8715,7 +8716,7 @@ ul {
87158716
87168717/* 트랜지션 타입에 의해 추가된 View Transition 클래스용 애니메이션 */
87178718::view-transition-old(.slide-forward ) {
8718- /* 앞으로 전환할 때 "old" 페이지는 왼쪽으로 슬라이드되어 나가야 합니다. */
8719+ /* 앞으로 전환할 때 "old" 페이지는 왼쪽으로 슬라이드되어 나가야 합니다. */
87198720 animation : 150ms cubic-bezier (0.4 , 0 , 1 , 1 ) both fade-out,
87208721 400ms cubic-bezier (0.4 , 0 , 0.2 , 1 ) both slide-to-left;
87218722}
@@ -8952,7 +8953,7 @@ function VideoInfo({ id }) {
89528953import { useId , useState , use , useDeferredValue , ViewTransition } from " react" ;import { Video } from " ./Videos" ;import Layout from " ./Layout" ;import { fetchVideos } from " ./data" ;import { IconSearch } from " ./Icons" ;
89538954
89548955function SearchList ({searchText, videos}) {
8955- // useDeferredValue로 활성화합니다("언제")
8956+ // useDeferredValue로 활성화합니다("언제")
89568957 const deferredSearchText = useDeferredValue (searchText);
89578958 const filteredVideos = filterVideos (videos, deferredSearchText);
89588959 return (
@@ -10037,7 +10038,7 @@ ul {
1003710038
1003810039/* 트랜지션 타입에 의해 추가된 View Transition 클래스용 애니메이션 */
1003910040::view-transition-old(.slide-forward ) {
10040- /* 앞으로 전환할 때 "old" 페이지는 왼쪽으로 슬라이드되어 나가야 합니다. */
10041+ /* 앞으로 전환할 때 "old" 페이지는 왼쪽으로 슬라이드되어 나가야 합니다. */
1004110042 animation : 150ms cubic-bezier (0.4 , 0 , 1 , 1 ) both fade-out,
1004210043 400ms cubic-bezier (0.4 , 0 , 0.2 , 1 ) both slide-to-left;
1004310044}
@@ -10268,7 +10269,7 @@ function VideoInfo({ id }) {
1026810269import { useId , useState , use , useDeferredValue , ViewTransition } from " react" ;import { Video } from " ./Videos" ;import Layout from " ./Layout" ;import { fetchVideos } from " ./data" ;import { IconSearch } from " ./Icons" ;
1026910270
1027010271function SearchList ({searchText, videos}) {
10271- // useDeferredValue로 활성화합니다("언제")
10272+ // useDeferredValue로 활성화합니다("언제")
1027210273 const deferredSearchText = useDeferredValue (searchText);
1027310274 const filteredVideos = filterVideos (videos, deferredSearchText);
1027410275 return (
@@ -11333,7 +11334,7 @@ ul {
1133311334
1133411335/* 트랜지션 타입에 의해 추가된 View Transition 클래스용 애니메이션 */
1133511336::view-transition-old(.slide-forward ) {
11336- /* 앞으로 전환할 때 "old" 페이지는 왼쪽으로 슬라이드되어 나가야 합니다. */
11337+ /* 앞으로 전환할 때 "old" 페이지는 왼쪽으로 슬라이드되어 나가야 합니다. */
1133711338 animation : 150ms cubic-bezier (0.4 , 0 , 1 , 1 ) both fade-out,
1133811339 400ms cubic-bezier (0.4 , 0 , 0.2 , 1 ) both slide-to-left;
1133911340}
@@ -11467,7 +11468,7 @@ _View Transition을 구축한 배경에 대한 자세한 내용은 다음을 참
1146711468
1146811469** ` <Activity /> ` 는 이제 React의 Canary 채널에서 사용할 수 있습니다.**
1146911470
11470- [ React의 릴리스 채널에 대해 더 알아보기] ( /community/versioning-policy#all-release-channels )
11471+ [ React의 릴리스 채널에 대해 더 알아보기] ( /community/versioning-policy#all-release-channels ) .
1147111472
1147211473</Note >
1147311474
@@ -11639,7 +11640,7 @@ function VideoInfo({ id }) {
1163911640import { useId , useState , use , useDeferredValue , ViewTransition } from " react" ;import { Video } from " ./Videos" ;import Layout from " ./Layout" ;import { fetchVideos } from " ./data" ;import { IconSearch } from " ./Icons" ;
1164011641
1164111642function SearchList ({searchText, videos}) {
11642- // useDeferredValue로 활성화합니다("언제")
11643+ // useDeferredValue로 활성화합니다("언제")
1164311644 const deferredSearchText = useDeferredValue (searchText);
1164411645 const filteredVideos = filterVideos (videos, deferredSearchText);
1164511646 return (
@@ -12723,7 +12724,7 @@ ul {
1272312724
1272412725/* 트랜지션 타입에 의해 추가된 View Transition 클래스용 애니메이션 */
1272512726::view-transition-old(.slide-forward ) {
12726- /* 앞으로 전환할 때 "old" 페이지는 왼쪽으로 슬라이드되어 나가야 합니다. */
12727+ /* 앞으로 전환할 때 "old" 페이지는 왼쪽으로 슬라이드되어 나가야 합니다. */
1272712728 animation : 150ms cubic-bezier (0.4 , 0 , 1 , 1 ) both fade-out,
1272812729 400ms cubic-bezier (0.4 , 0 , 0.2 , 1 ) both slide-to-left;
1272912730}
@@ -12908,6 +12909,7 @@ import { use, Suspense, ViewTransition } from "react"; import { fetchVideo, fetc
1290812909function VideoDetails ({id}) {
1290912910 // Suspense 폴백에서 콘텐츠로 애니메이션합니다.
1291012911 // 미리 렌더링되어 있다면 폴백을 표시할 필요가 없습니다.
12912+
1291112913 return (
1291212914 < Suspense
1291312915 fallback= {
@@ -12976,7 +12978,7 @@ function VideoInfo({ id }) {
1297612978import { useId , useState , use , useDeferredValue , ViewTransition } from " react" ;import { Video } from " ./Videos" ;import Layout from " ./Layout" ;import { fetchVideos } from " ./data" ;import { IconSearch } from " ./Icons" ;
1297712979
1297812980function SearchList ({searchText, videos}) {
12979- // useDeferredValue로 활성화합니다("언제")
12981+ // useDeferredValue로 활성화합니다("언제")
1298012982 const deferredSearchText = useDeferredValue (searchText);
1298112983 const filteredVideos = filterVideos (videos, deferredSearchText);
1298212984 return (
@@ -14060,7 +14062,7 @@ ul {
1406014062
1406114063/* 트랜지션 타입에 의해 추가된 View Transition 클래스용 애니메이션 */
1406214064::view-transition-old(.slide-forward ) {
14063- /* 앞으로 전환할 때 "old" 페이지는 왼쪽으로 슬라이드되어 나가야 합니다. */
14065+ /* 앞으로 전환할 때 "old" 페이지는 왼쪽으로 슬라이드되어 나가야 합니다. */
1406414066 animation : 150ms cubic-bezier (0.4 , 0 , 1 , 1 ) both fade-out,
1406514067 400ms cubic-bezier (0.4 , 0 , 0.2 , 1 ) both slide-to-left;
1406614068}
@@ -14256,8 +14258,7 @@ hooks를 출시했을 때, 저희는 세 가지 동기가 있었습니다:
1425614258- ** 생명주기가 아닌 함수의 관점에서 사고** : hooks는 생명주기 메서드를 기반으로 한 분할을 강제하는 것이 아니라 관련된 부분(구독 설정이나 데이터 가져오기 등)을 기반으로 하나의 컴포넌트를 더 작은 함수로 분할할 수 있게 해주었습니다.
1425714259- ** 사전 컴파일 지원** : hooks는 생명주기 메서드로 인한 의도하지 않은 최적화 해제 문제와 클래스의 제약사항을 줄이면서 사전 컴파일을 지원하도록 설계되었습니다.
1425814260
14259- 출시 이후 hooks는 * 컴포넌트 간 코드 공유* 측면에서 성공을 거두었습니다.
14260- 현재 hooks는 컴포넌트 간 로직을 공유하는 데 선호되는 방식이며, 렌더링 props와 고차 컴포넌트를 사용할 필요가 있는 경우도 줄어들었습니다. 또한 hooks는 클래스 컴포넌트로는 가능하지 않았던 Fast Refresh와 같은 기능을 지원하는 데에도 성공했습니다.
14261+ 출시 이후 hooks는 * 컴포넌트 간 코드 공유* 측면에서 성공을 거두었습니다. 현재 hooks는 컴포넌트 간 로직을 공유하는 데 선호되는 방식이며, 렌더링 props와 고차 컴포넌트를 사용할 필요가 있는 경우도 줄어들었습니다. 또한 hooks는 클래스 컴포넌트로는 가능하지 않았던 Fast Refresh와 같은 기능을 지원하는 데에도 성공했습니다.
1426114262
1426214263### Effects는 어려울 수 있습니다 {/* effects-can-be-hard* /}
1426314264
@@ -14275,7 +14276,7 @@ useEffect(() => {
1427514276 const connection = createConnection (serverUrl, roomId);
1427614277 connection .connect ();
1427714278 return () => {
14278- // ...연결이 끊어질 때까지
14279+ // ...연결이 끊어질 때까지
1427914280 connection .disconnect ();
1428014281 };
1428114282}, [roomId]);
@@ -14301,7 +14302,7 @@ useEffect(() => {
1430114302}); // 컴파일러가 삽입한 의존성
1430214303```
1430314304
14304- 이 코드에서는 React 컴파일러가 의존성을 자동으로 추론해 삽입하므로, 개발자가 직접 보거나 작성할 필요가 없습니다. [ IDE 확장] ( #컴파일러 -ide-extension ) 이나 [ ` useEffectEvent ` ] ( /reference/react/useEffectEvent ) 같은 기능을 사용하면, 디버깅이 필요하거나 의존성을 제거해 최적화해야 할 때 컴파일러가 무엇을 삽입했는지 보여주는 CodeLens를 제공할 수 있습니다. 이는 컴포넌트나 Hook의 상태를 다른 무언가와 동기화하기 위해 언제든 실행될 수 있는 Effect를 작성할 때, 올바른 사고 모델을 강화하는 데 도움이 됩니다.
14305+ 이 코드에서는 React 컴파일러가 의존성을 자동으로 추론해 삽입하므로, 개발자가 직접 보거나 작성할 필요가 없습니다. [ IDE 확장] ( #compiler -ide-extension ) 이나 [ ` useEffectEvent ` ] ( /reference/react/useEffectEvent ) 같은 기능을 사용하면, 디버깅이 필요하거나 의존성을 제거해 최적화해야 할 때 컴파일러가 무엇을 삽입했는지 보여주는 CodeLens를 제공할 수 있습니다. 이는 컴포넌트나 Hook의 상태를 다른 무언가와 동기화하기 위해 언제든 실행될 수 있는 Effect를 작성할 때, 올바른 사고 모델을 강화하는 데 도움이 됩니다.
1430514306
1430614307저희의 바람은 의존성을 자동으로 삽입하는 방식이 작성하기 쉬울 뿐만 아니라, 컴포넌트 생명주기가 아니라 Effect가 무엇을 하는지에 집중하도록 강제함으로써 이해하기도 더 쉬워지는 것입니다.
1430714308
0 commit comments