mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
refactor Post.jsx with memoization
This commit is contained in:
+10
-11
@@ -1,21 +1,24 @@
|
|||||||
import React from 'react';
|
import React, { useMemo } from 'react';
|
||||||
import ReactMarkdown from 'react-markdown';
|
import ReactMarkdown from 'react-markdown';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import rehypeSanitize, { defaultSchema } from 'rehype-sanitize';
|
import rehypeSanitize, { defaultSchema } from 'rehype-sanitize';
|
||||||
import breaks from 'remark-breaks';
|
import breaks from 'remark-breaks';
|
||||||
|
|
||||||
|
|
||||||
const customSchema = {
|
const Post = ({ content }) => {
|
||||||
|
const doubleNewlineContent = useMemo(() => content?.replaceAll(/\n(?!\n)/g, '\n\n'), [content]);
|
||||||
|
|
||||||
|
const customSchema = useMemo(() => ({
|
||||||
...defaultSchema,
|
...defaultSchema,
|
||||||
tagNames: [...defaultSchema.tagNames, 'div'],
|
tagNames: [...defaultSchema.tagNames, 'div'],
|
||||||
attributes: {
|
attributes: {
|
||||||
...defaultSchema.attributes,
|
...defaultSchema.attributes,
|
||||||
div: ['className'],
|
div: ['className'],
|
||||||
},
|
},
|
||||||
};
|
}), []);
|
||||||
|
|
||||||
|
|
||||||
const blockquoteToGreentext = () => (tree) => {
|
const blockquoteToGreentext = () => (tree) => {
|
||||||
tree.children.forEach((node) => {
|
tree.children.forEach((node) => {
|
||||||
if (node.type === 'blockquote') {
|
if (node.type === 'blockquote') {
|
||||||
node.children.forEach((child) => {
|
node.children.forEach((child) => {
|
||||||
@@ -36,10 +39,10 @@ const blockquoteToGreentext = () => (tree) => {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const createQuotelink = (children) => {
|
const createQuotelink = (children) => {
|
||||||
const regexC = /(c\/[A-Za-z0-9]{46}|c\/[A-Za-z0-9]{12})/g;
|
const regexC = /(c\/[A-Za-z0-9]{46}|c\/[A-Za-z0-9]{12})/g;
|
||||||
const regexP = /(p\/([A-Za-z0-9]{52}|[A-Za-z0-9-.]*\.eth))/g;
|
const regexP = /(p\/([A-Za-z0-9]{52}|[A-Za-z0-9-.]*\.eth))/g;
|
||||||
const regexU = /(u\/([A-Za-z0-9]{52}|[A-Za-z0-9-.]*\.eth))/g;
|
const regexU = /(u\/([A-Za-z0-9]{52}|[A-Za-z0-9-.]*\.eth))/g;
|
||||||
@@ -88,13 +91,9 @@ const createQuotelink = (children) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
return parts;
|
return parts;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const Post = ({ content }) => {
|
|
||||||
const doubleNewlineContent = content?.replaceAll(/\n(?!\n)/g, '\n\n');
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ReactMarkdown
|
<ReactMarkdown
|
||||||
children={doubleNewlineContent}
|
children={doubleNewlineContent}
|
||||||
|
|||||||
Reference in New Issue
Block a user