denoとTypeScriptでReactを使いたい
deno環境下でReactを使う際の備忘録
目標はブラウザに任意のdomを追加して動かすこと
今回、サーバーサイドのReactには手を触れない
後でまとめるかもしれない
前提
後述の派生ページでは、(特筆する場合を除き)以下のソースコードを共通で使用する
派生ページ:denoとTypeScriptでReactを使いたい#630519377838e30000d6cac1
html
code:a.html
<!DOCTYPE html>
<head>
<title>main.html</title>
<script type="module" src="a.js"></script>
<link rel="stylesheet" href="a.css">
</head>
<body>
</body>
<script>の属性にtype="module"を付けていないと、Top level await(JavaScript)を使えないので注意
要は、sleep関数を関数に入れなくても使えるようにしている
上のa.htmlと同じディレクトリ(フォルダ)に、下のa.cssとa.tsxをコンパイルしたa.jsを入れる
コンパイルはdeno bundle a.tsx a.jsというコマンドを入力してできる
deno bundle
CSS
無くても良いが、あったほうが見やすくなる
code:a.css
div.foo {
width: 150px;
height: 150px;
background-color: aqua;
}
TypeScript
ソースコード冒頭に書くライブラリ指定
code:a.tsx
/// <reference no-default-lib="true" />
/// <reference lib="esnext" />
/// <reference lib="dom" />
ライブラリのimport文
code:a.tsx
import React from "https://esm.sh/react@18.2.0";
import ReactDOM from "https://esm.sh/react-dom@18.2.0";
import ReactDOMClient, {
createRoot,
} from "https://esm.sh/react-dom@18.2.0/client";
JavaScriptにてsleep関数を実装する
code:a.tsx
function sleep(ms: number) {
return new Promise((res) => setTimeout(res, ms));
}
派生ページ一覧
要素を追加する
Reactを使ってDOM要素を追加する
関数コンポーネントを利用して要素を追加する
追加した要素を動かす
Reactでカウントダウンタイマーを作る
DOMを操作したい