Loading...
Loading...
Compare original and translation side by side
<MyContext value={someValue}>
<ChildComponents />
</MyContext><MyContext.Provider value={someValue}>
<ChildComponents />
</MyContext.Provider><MyContext value={someValue}>
<ChildComponents />
</MyContext><MyContext.Provider value={someValue}>
<ChildComponents />
</MyContext.Provider>use()useContext()use()useContext()use()import { use } from "react";
import { MyContext } from "./MyContext";
function MyComponent() {
const value = use(MyContext);
return <div>{value}</div>;
}import { useContext } from "react";
import { MyContext } from "./MyContext";
function MyComponent() {
const value = useContext(MyContext);
return <div>{value}</div>;
}use()import { use } from "react";
import { MyContext } from "./MyContext";
function MyComponent() {
const value = use(MyContext);
return <div>{value}</div>;
}import { useContext } from "react";
import { MyContext } from "./MyContext";
function MyComponent() {
const value = useContext(MyContext);
return <div>{value}</div>;
}function MyComponent({ items }) {
// React Compiler automatically memoizes this computation
const filteredItems = items.filter((item) => item.active);
// React Compiler automatically stabilizes this function reference
const handleClick = (id) => {
console.log(id);
};
return (
<div>
{filteredItems.map((item) => (
<button key={item.id} onClick={() => handleClick(item.id)}>
{item.name}
</button>
))}
</div>
);
}import { useMemo, useCallback, memo } from "react";
function MyComponent({ items }) {
// ❌ Don't use useMemo - React Compiler handles this
const filteredItems = useMemo(
() => items.filter((item) => item.active),
[items],
);
// ❌ Don't use useCallback - React Compiler handles this
const handleClick = useCallback((id) => {
console.log(id);
}, []);
return <div>...</div>;
}
// ❌ Don't use memo() - React Compiler handles this
export default memo(MyComponent);function MyComponent({ items }) {
// React Compiler 会自动缓存该计算结果
const filteredItems = items.filter((item) => item.active);
// React Compiler 会自动稳定该函数引用
const handleClick = (id) => {
console.log(id);
};
return (
<div>
{filteredItems.map((item) => (
<button key={item.id} onClick={() => handleClick(item.id)}>
{item.name}
</button>
))}
</div>
);
}import { useMemo, useCallback, memo } from "react";
function MyComponent({ items }) {
// ❌ 不要使用 useMemo - React Compiler 会处理
const filteredItems = useMemo(
() => items.filter((item) => item.active),
[items],
);
// ❌ 不要使用 useCallback - React Compiler 会处理
const handleClick = useCallback((id) => {
console.log(id);
}, []);
return <div>...</div>;
}
// ❌ 不要使用 memo() - React Compiler 会处理
export default memo(MyComponent);<ViewTransition>A tree hydrated but some attributes of the server rendered HTML didn't match the client properties.
This won't be patched up. This can happen if a SSR-ed Client Component used...
Specifically: style={{view-transition-name:"_T_0_"}}view-transition-name<ViewTransition>A tree hydrated but some attributes of the server rendered HTML didn't match the client properties.
This won't be patched up. This can happen if a SSR-ed Client Component used...
Specifically: style={{view-transition-name:"_T_0_"}}view-transition-name<ViewTransition>
<Suspense fallback={<HeaderSkeleton />}>
<Header />
</Suspense>
<Suspense fallback={null}>{children}</Suspense>
</ViewTransition><ViewTransition>
<Suspense fallback={<HeaderSkeleton />}>
<Header />
</Suspense>
{children} {/* NOT in Suspense - causes hydration error! */}
</ViewTransition><Suspense fallback={<LoadingSkeleton />}>
<ViewTransition>
<Header />
{children}
</ViewTransition>
</Suspense><ViewTransition>
<Suspense fallback={<HeaderSkeleton />}>
<Header />
</Suspense>
<Suspense fallback={null}>{children}</Suspense>
</ViewTransition><ViewTransition>
<Suspense fallback={<HeaderSkeleton />}>
<Header />
</Suspense>
{children} {/* 不在 Suspense 中 - 会导致水合错误! */}
</ViewTransition><Suspense fallback={<LoadingSkeleton />}>
<ViewTransition>
<Header />
{children}
</ViewTransition>
</Suspense><Context value={...}><Context.Provider value={...}>use(Context)useContext(Context)<Context value={...}><Context.Provider value={...}>use(Context)useContext(Context)