Skip to content

Commit 92ca50f

Browse files
committed
fix(react): add <HeadProvider />
1 parent 3086a9d commit 92ca50f

File tree

3 files changed

+19
-6
lines changed

3 files changed

+19
-6
lines changed

packages/react/head.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export { Head } from "./dist/head";
1+
export { Head, HeadProvider } from "./dist/head";

packages/react/src/head-context.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { createContext, ReactElement, ReactNode } from "react";
22

3-
class HeadProvider {
3+
export class HeadManager {
44
private head: React.ReactElement[] = [];
55

66
private removeTag(tag: string) {
@@ -31,6 +31,6 @@ class HeadProvider {
3131
}
3232
}
3333

34-
const headProvider = new HeadProvider();
34+
const defaultHeadManager = new HeadManager();
3535

36-
export const HeadContext = createContext(headProvider);
36+
export const HeadContext = createContext(defaultHeadManager);

packages/react/src/head.tsx

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { useContext } from "react";
2-
import { HeadContext } from "./head-context";
1+
import { useContext, useRef } from "react";
2+
import { HeadContext, HeadManager } from "./head-context";
33

44
interface HeadProps {
55
title?: string;
@@ -14,3 +14,16 @@ export const Head: React.FC<HeadProps> = ({ children, title }) => {
1414
}
1515
return null;
1616
};
17+
18+
export const HeadProvider: React.FC<React.PropsWithChildren> = ({ children }) => {
19+
const headProvider = useRef<HeadManager>();
20+
if (headProvider.current == null) {
21+
headProvider.current = new HeadManager();
22+
}
23+
24+
return (
25+
<HeadContext.Provider value={headProvider.current}>
26+
{children}
27+
</HeadContext.Provider>
28+
)
29+
}

0 commit comments

Comments
 (0)