我需要将包含模板脚本的自定义 HTML 添加到 Docusaurus 站点(基于 React),但该站点没有 .html 文件 - 只有 .js 文件,然后编译这些文件以创建静态站点。具体来说,我需要添加一个包含<script type="text/template"></script>
块的 .html 文件,这意味着我不能像普通的 HTML 元素那样使用 React/JSX 来渲染它。
到目前为止,这是我的尝试,这导致页面上显示一个文字字符串,其中包含我的<script type="text/template"></script>
块的内容:
Footer.js
const React = require('react');
// for instantsearch
const fs = require('fs'); //Filesystem
const resultsTemplate = fs.readFileSync(`${process.cwd()}/static/resultsTemplate.html`,"utf-8");
class Footer extends React.Component {
...
render () {
return (
<footer className='nav-footer' id='footer'>
...
{resultsTemplate}
</footer>
);
}
}
module.exports = Footer;
如果我不使用fs
并设置
const resultsTemplate = require(`${process.cwd()}/static/resultsTemplate.html`);
运行时出现以下错误npm start
:
(function (exports, require, module, __filename, __dirname) { <script type="text/template" id="results-template">
^
SyntaxError: Unexpected token <
这就是我使用fs
.
这是resultsTemplate.html
,我想将其注入页脚:
<script type="text/template" id="results-template">
<div class="ais-result">
{{#hierarchy.lvl0}}
<div class="ais-lvl0">
{{{_highlightResult.hierarchy.lvl0.value}}}
</div>
{{/hierarchy.lvl0}}
<div class="ais-lvl1">
{{#hierarchy.lvl1}}
{{{_highlightResult.hierarchy.lvl1.value}}}
{{/hierarchy.lvl1}}
{{#hierarchy.lvl2}} >
...
</div>
<div class="ais-content">
{{{#content}}}
{{{_highlightResult.content.value}}}
{{{/content}}}
</div>
</div>
</script>
最后,这是应该使用正确值填充模板的函数(取自 Algolia):
mainSearch.addWidget(
instantsearch.widgets.hits({
container: '#search-hits',
templates: {
empty: 'No results',
item: $('#results-template').html()
},
hitsPerPage: 10
})
);
有关更多上下文,我正在尝试在我的站点中实现此功能:https ://jsfiddle.net/965a4w3o/4/