Мне нужно создать приложение Next. js внутри сторонней html разметки.
Разметка имеет следующий вид:
header.txt
<html>
<head>
<title>Some title</title>
</head>
<body>
<header>Some header</header>
<div>
footer.txt
</div>
<footer>Some footer</footer>
</body>
</html>
Эти файлы динамически создаются в папке. Когда я выполняю рендеринг моего следующего. js приложения, мне нужно обернуть его вокруг моего приложения.
Я создал рабочий пример, используя пакет под названием: html -react-parser
I разобрать разметку из файлов в _document. js, и я ищу пользовательский идентификатор элемента, который я заменяю следующим js приложением следующим образом:
const header = fs.readFileSync(path.resolve(ROOT + '/resources', 'header.txt'), 'utf8');
const footer = fs.readFileSync(path.resolve(ROOT + '/resources', 'footer.txt'), 'utf8');
const shell = `
${header}
<main id="react-app"></main>
${footer}
`;
// later in the render method od _document.js:
render() {
return (
<React.Fragment>
{parse(shell, {
replace: domNode => {
if (domNode.attribs && domNode.attribs.id === 'react-app') {
return (
<React.Fragment>
<Main/>
<NextScript/>
</React.Fragment>
)
}
}
})}
</React.Fragment>
)
}
Хотя это работает, моя проблема в том, что это не цель html -react-parser, поскольку он преобразует разметку файлов в реагирующие компоненты, и выдает много предупреждений во время преобразования о неправильно используемых html реквизитах, которые реагировать не может.
Возможно, решение было бы использовать опасно SetInner HTML, но в этом случае я не могу ввести и.
// it fails because it wont treat the components as normal html
// <Main/><NextScript/> are not evaluated
const header = fs.readFileSync(path.resolve(ROOT + '/resources', 'header.txt'), 'utf8');
const footer = fs.readFileSync(path.resolve(ROOT + '/resources', 'footer.txt'), 'utf8');
const shell = `
${header}
<React.Fragment>
<Main/>
<NextScript/>
</React.Fragment>
${footer}
`;
// later in the render method od _document.js:
render(<html dangerouslySetInnerHTML={{__html: shell}}/>)
Если у кого-то есть идея, как мне обернуть мое следующее приложение вокруг моей разметки, исходящей из файлов, пожалуйста, дайте мне несколько советов.