将组件 props 传递给 MDX Provider - ReactJS
Passing component props to MDX Provider - ReactJS
我正在使用 MDX Provider,如下所示:-
<MDXProvider components={components}>
<ButtonMarkdown />
</MDXProvider>
组件是:-
import { Button, Heading } from './components/button';
const components = {
pre: (props: any) => <div {...props} />,
h1: Heading,
h2: Heading,
h3: Heading,
code: Codeblock,
inlineCode: Codeblock,
};
但是我希望能够将道具传递到我的降价文件中使用的标题组件中,例如:-
## Heading Two
应该改为:-
<Heading level="2">Heading Two</Heading>
我该怎么做才能确保我的降价被传递到相关组件的正确道具?
您可以在 MDXProvider
中提供多个级别的标题:
<MDXProvider components={{
h1: Heading1,
h2: Heading2,
h3: Heading3,
h4: Heading4,
pre: Code,
table: Table,
th: TableHeading,
tr: TableRow,
td: TableCell,
p: Paragraph
}}>
{children}
</MDXProvider>
它们可以这样定义:
const Heading1: FC = ({ children }) => (
<Heading level={1}>{children}</Heading>
);
const Heading2: FC = ({ children }) => (
<Heading level={2}>{children}</Heading>
);
const Heading3: FC = ({ children }) => (
<Heading level={3}>{children}</Heading>
);
const Heading4: FC = ({ children }) => (
<Heading level={4}>{children}</Heading>
);
在 MDX 呈现时,second-level 标题 ##
最终将被 <Heading level={2}>
替换。
只是为了使这个答案更完整,这是实现正确的标题组件的一种方法,该组件将在级别属性为 1 时呈现 <h1>
,依此类推:
export const Heading: FC = ({
level = 1,
children,
}) => {
const HeadingElement = `h${level}`;
return (
<HeadingElement>
{children}
</HeadingElement>
);
};
我正在使用 MDX Provider,如下所示:-
<MDXProvider components={components}>
<ButtonMarkdown />
</MDXProvider>
组件是:-
import { Button, Heading } from './components/button';
const components = {
pre: (props: any) => <div {...props} />,
h1: Heading,
h2: Heading,
h3: Heading,
code: Codeblock,
inlineCode: Codeblock,
};
但是我希望能够将道具传递到我的降价文件中使用的标题组件中,例如:-
## Heading Two
应该改为:-
<Heading level="2">Heading Two</Heading>
我该怎么做才能确保我的降价被传递到相关组件的正确道具?
您可以在 MDXProvider
中提供多个级别的标题:
<MDXProvider components={{
h1: Heading1,
h2: Heading2,
h3: Heading3,
h4: Heading4,
pre: Code,
table: Table,
th: TableHeading,
tr: TableRow,
td: TableCell,
p: Paragraph
}}>
{children}
</MDXProvider>
它们可以这样定义:
const Heading1: FC = ({ children }) => (
<Heading level={1}>{children}</Heading>
);
const Heading2: FC = ({ children }) => (
<Heading level={2}>{children}</Heading>
);
const Heading3: FC = ({ children }) => (
<Heading level={3}>{children}</Heading>
);
const Heading4: FC = ({ children }) => (
<Heading level={4}>{children}</Heading>
);
在 MDX 呈现时,second-level 标题 ##
最终将被 <Heading level={2}>
替换。
只是为了使这个答案更完整,这是实现正确的标题组件的一种方法,该组件将在级别属性为 1 时呈现 <h1>
,依此类推:
export const Heading: FC = ({
level = 1,
children,
}) => {
const HeadingElement = `h${level}`;
return (
<HeadingElement>
{children}
</HeadingElement>
);
};