Skip to content

Commit 173aad5

Browse files
committed
Fixed 66 example
1 parent aa556e7 commit 173aad5

3 files changed

+77
-29
lines changed

src/08-advanced-patterns/66-forward-ref-as-local-function.problem.tsx

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ForwardedRef, forwardRef } from "react";
1+
import { ForwardedRef, forwardRef, useRef } from "react";
22
import { Equal, Expect } from "../helpers/type-utils";
33

44
/**
@@ -17,20 +17,36 @@ type Props<T> = {
1717
renderRow: (item: T) => React.ReactNode;
1818
};
1919

20-
export const Table = <T,>(props: Props<T>, ref: ForwardedRef<any>) => {
21-
return null;
20+
export const Table = <T,>(
21+
props: Props<T>,
22+
ref: ForwardedRef<HTMLTableElement>,
23+
) => {
24+
return <table ref={ref} />;
2225
};
2326

2427
const ForwardReffedTable = fixedForwardRef(Table);
2528

2629
const Parent = () => {
30+
const tableRef = useRef<HTMLTableElement>(null);
31+
const wrongRef = useRef<HTMLDivElement>(null);
2732
return (
28-
<ForwardReffedTable
29-
data={["123"]}
30-
renderRow={(row) => {
31-
type test = Expect<Equal<typeof row, string>>;
32-
return <div>123</div>;
33-
}}
34-
></ForwardReffedTable>
33+
<>
34+
<ForwardReffedTable
35+
ref={tableRef}
36+
data={["123"]}
37+
renderRow={(row) => {
38+
type test = Expect<Equal<typeof row, string>>;
39+
return <div>123</div>;
40+
}}
41+
/>
42+
<ForwardReffedTable
43+
// @ts-expect-error
44+
ref={wrongRef}
45+
data={["123"]}
46+
renderRow={(row) => {
47+
return <div>123</div>;
48+
}}
49+
/>
50+
</>
3551
);
3652
};
Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ForwardedRef, forwardRef } from "react";
1+
import { ForwardedRef, forwardRef, useRef } from "react";
22
import { Equal, Expect } from "../helpers/type-utils";
33

44
function fixedForwardRef<T, P = {}>(
@@ -12,20 +12,36 @@ type Props<T> = {
1212
renderRow: (item: T) => React.ReactNode;
1313
};
1414

15-
export const Table = <T,>(props: Props<T>, ref: ForwardedRef<any>) => {
16-
return null;
15+
export const Table = <T,>(
16+
props: Props<T>,
17+
ref: ForwardedRef<HTMLTableElement>,
18+
) => {
19+
return <table ref={ref} />;
1720
};
1821

1922
const ForwardReffedTable = fixedForwardRef(Table);
2023

2124
const Parent = () => {
25+
const tableRef = useRef<HTMLTableElement>(null);
26+
const wrongRef = useRef<HTMLDivElement>(null);
2227
return (
23-
<ForwardReffedTable
24-
data={["123"]}
25-
renderRow={(row) => {
26-
type test = Expect<Equal<typeof row, string>>;
27-
return <div>123</div>;
28-
}}
29-
></ForwardReffedTable>
28+
<>
29+
<ForwardReffedTable
30+
ref={tableRef}
31+
data={["123"]}
32+
renderRow={(row) => {
33+
type test = Expect<Equal<typeof row, string>>;
34+
return <div>123</div>;
35+
}}
36+
/>
37+
<ForwardReffedTable
38+
// @ts-expect-error
39+
ref={wrongRef}
40+
data={["123"]}
41+
renderRow={(row) => {
42+
return <div>123</div>;
43+
}}
44+
/>
45+
</>
3046
);
3147
};

src/08-advanced-patterns/66-forward-ref-as-local-function.solution.2.tsx

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,36 @@ type Props<T> = {
1313
renderRow: (item: T) => React.ReactNode;
1414
};
1515

16-
export const Table = <T,>(props: Props<T>, ref: ForwardedRef<any>) => {
17-
return null;
16+
export const Table = <T,>(
17+
props: Props<T>,
18+
ref: ForwardedRef<HTMLTableElement>,
19+
) => {
20+
return <table ref={ref} />;
1821
};
1922

2023
const ForwardReffedTable = fixedForwardRef(Table);
2124

2225
const Parent = () => {
26+
const tableRef = useRef<HTMLTableElement>(null);
27+
const wrongRef = useRef<HTMLDivElement>(null);
2328
return (
24-
<ForwardReffedTable
25-
data={["123"]}
26-
renderRow={(row) => {
27-
type test = Expect<Equal<typeof row, string>>;
28-
return <div>123</div>;
29-
}}
30-
></ForwardReffedTable>
29+
<>
30+
<ForwardReffedTable
31+
ref={tableRef}
32+
data={["123"]}
33+
renderRow={(row) => {
34+
type test = Expect<Equal<typeof row, string>>;
35+
return <div>123</div>;
36+
}}
37+
/>
38+
<ForwardReffedTable
39+
// @ts-expect-error
40+
ref={wrongRef}
41+
data={["123"]}
42+
renderRow={(row) => {
43+
return <div>123</div>;
44+
}}
45+
/>
46+
</>
3147
);
3248
};

0 commit comments

Comments
 (0)