Jekyll 的目的是生成静态网站,例如简单的博客、登陆页面、投资组合等。但是,您似乎想要一个动态网页。在这种情况下,我建议您根本不要使用 Jekyll。并不是说你不能用 Jekyll 完成它,但我不明白为什么你应该不去使用它。
如果你真的想用 Jekyll,我能想到的方式就是用 AJAX。这意味着您可以通过添加到页面模板(“_layouts”文件夹)中的脚本使用 javascript 动态更改页面。如果您选择这种方法,您可以使用 JQuery 让您的生活更轻松。
总之,在这种情况下,“正确的方向”是避免 Jekyll。老实说,我不知道“在 Jekyll 中执行此操作的最佳方法”,但您可以使用上述方法实现您想要的。
编辑:我认为 OP 想要一个动态网站,其内容将从 HTTP 请求获取到他的 API。原来他显然有一堆JSON文件存储在“数据”文件夹中,然后使用这些文件生成静态网站。对于那些感兴趣的人,如果我的假设是正确的,我提出的解决方案将是这样的:
_layouts/default.html
<!DOCTYPE html>
<html>
<head>
<!-- Load react, react-dom and babel -->
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script type="text/babel" src="/public/index.js"></script>
</head>
<body>
<div id="index">
</div>
</body>
</html>
公共/index.js
function Hyperlink(props) {
const url = `https://jsonplaceholder.typicode.com/posts/${props.id}`
return (
<a href={url}>{props.title}</a>
)
}
class Index extends React.Component {
constructor(props) {
super(props);
this.state = {posts: []}
}
componentDidMount() {
let xhr = new XMLHttpRequest();
xhr.open("GET", 'https://jsonplaceholder.typicode.com/posts');
xhr.send(null);
const that = this;
xhr.onreadystatechange = function() {
const DONE = 4;
const HTTP_OK = 200;
if(xhr.readyState == DONE) {
if(xhr.status == HTTP_OK) {
that.setState({
posts: JSON.parse(xhr.responseText)
})
} else {
console.log(xhr.status);
}
}
}
}
render() {
return (
<ul>
{
this.state.posts.map((post, idx) => <li key={idx}><Hyperlink id={post.id} title={post.title} /></li>)
}
</ul>
);
}
}
ReactDOM.render(
<Index />
, document.getElementById("index")
);
结果
结果
有了这个,你只需要一个根元素(可以是任何 div)来放入你的动态生成。