### React
まず、reactで実装したコードをbuildする
$ npm run build
すると、build/static/js にjsファイル一群ができるので、その中からmain.*.jsをコピーする
axumのルートディレクトリにstaticフォルダを作成して、./static/js/script.js にbuildされたjsのスクリプトを貼り付ける。
### axum側
dependencyに tower-httpを追加
tower-http = { version = “0.6.2”, features = [“fs”] }
templatesのhtmlからjsファイルを読み込めるように、ルーティングで読み込めるようにする
use tower_http::services::{ServeDir, ServeFile}; #[tokio::main] async fn main() { let serve_dir = ServeDir::new("static").not_found_service(ServeFile::new("static")); let app = Router::new() .route("/", get(handler_index)) .nest_service("/static", serve_dir.clone()) .fallback_service(serve_dir.clone()); let listener = tokio::net::TcpListener::bind("0.0.0.0:3000") .await .unwrap(); axum::serve(listener, app).await.unwrap(); }
templates/index.html
<body> <h1>Hello world</h1> <div id="root">wait...</div> <script src="./js/script.js"></script> </body> </html>
なるほど、いけますね。あとは作り込みのみ!