首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Oak中使用JSX作为视图引擎

在Oak中使用JSX作为视图引擎
EN

Stack Overflow用户
提问于 2021-04-01 16:06:28
回答 1查看 550关注 0票数 0

我正在尝试用Deno和Oak创建一个简单的html页面。

作为视图引擎,我喜欢使用JSX来生成实际的html。

这里有一个简单的示例,但这失败了,因为JSX被转换为React.createElement,并且无法使用React。

但是,我现在需要导入完整的React库吗?这可能吗?

(我不需要钩子)

代码语言:javascript
复制
import { Application } from "https://deno.land/x/oak@v6.5.0/mod.ts";
import page from "./page.jsx";

const app = new Application();

app.use((ctx) => {
  ctx.response.body = page();
});

await app.listen({ port: 8000 });

page.jsx

代码语言:javascript
复制
export default function() {
    return(<div>TEST</div>)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-01 21:51:22

我就这样解决了:

deps.ts

代码语言:javascript
复制
export { Application } from "https://deno.land/x/oak@v6.5.0/mod.ts";
export { h } from "https://cdn.skypack.dev/preact";
export { render } from "https://cdn.skypack.dev/preact-render-to-string@v5.1.12";

home.jsx

代码语言:javascript
复制
/** @jsx h */
import {h} from './deps.ts';

export default function () {
    return <div>TEST</div>
}   

JSX实用化将以h(超文本)代替。

您还可以使用如下所示的tsconfig.json:

代码语言:javascript
复制
{
    "compilerOptions": {
        "jsxFactory": "h",
    }
}

您必须像这样加载它:deno run --config ./tsconfig.json ...

server.js

代码语言:javascript
复制
import { Application, render } from "./deps.ts";
import home from "./home.jsx";

const app = new Application();

const respond = function (ctx, vdom) {
  ctx.response.type = "html";
  ctx.response.body = render(vdom(), {}, {pretty: true});
};

app.use((ctx) => {
  respond(ctx, home);
});

await app.listen({ port: 8000 });

这里是有关在Deno中使用JSX的更多信息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66907992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档