質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

2回答

671閲覧

Go/TypeScriptでHelloと表示させたい

apprentice413

総合スコア1

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2023/01/27 09:59

編集2023/01/27 10:07

初心者です。Helloと表示させたいです。
前面をTypeScript(react)で、背面をGoで構築しようとしています。
go run main.goで実行した時、typescriptのコードがそのままlocalhost:8080に表示されてしまうのですが、どのようにすれば解決できますか?

最終的に目指したい姿

go run main.go で実行したとき、localhost:8080で以下の画面が表示されること。

Hello

問題の状況

index.tsxの文章がそのままlocalhost:8080に出力される。

import React from 'react'; import ReactDOM from 'react-dom/client'; import { BrowserRouter, Route, Routes} from 'react-router-dom'; import Hello from './hello/hello'; const root = ReactDOM.createRoot( document.getElementById('root') as HTMLElement ); root.render( <React.StrictMode> <BrowserRouter> <Routes> <Route path={`/`} element={<Hello />} /> </Routes> </BrowserRouter> </React.StrictMode> );

前提条件

全体のディレクトリ構造は以下の通りです。

app -controllers -hello.go -webserver.go -views -src -index.tsx -hello -hello.tsx -components -Title.tsx main.go go.mod

hello.goの記述

func hello(w http.ResponseWriter, r *http.Request) { t, _ := template.ParseFiles("app/views/src/index.tsx") t.Execute(w, nil)

webserver.goの記述

func StartWebServer() error { http.HandleFunc("/", hello) return http.ListenAndServe(fmt.Sprintf(":%d", config.Config.Port), nil)

index.tsxの記述

import React from 'react'; import ReactDOM from 'react-dom/client'; import { BrowserRouter, Route, Routes} from 'react-router-dom'; import Hello from './hello/hello'; const root = ReactDOM.createRoot( document.getElementById('root') as HTMLElement ); root.render( <React.StrictMode> <BrowserRouter> <Routes> <Route path={`/`} element={<Hello />} /> </Routes> </BrowserRouter> </React.StrictMode> );

hello.tsxの記述

import Title from "./components/Title"; func Hello() { return ( <div className="test"> <Title / > </div> ); }

Title.tsxの記述

const Title = () => <h1>Hello</h1> export default Title;

解決策探し

hello.goの記述が問題なのだろうな、と考えています。

t, _ := template.ParseFiles("app/views/src/index.tsx")

試しに"app/views/src/hello/hello.tsx"に変えてみても、localhost:8080の結果はtsxの記述がそのままコード文で表示されてしまいます。ご教示のほどよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

基本中の基本を理解しないまま先に進んでるから何もかも全部間違える。
まずgoは忘れてReactだけでHelloを表示させる。
どこかの変なブログをコピペして「ローカルサーバーで動かすまで」ではなくJSをビルドして他の人に公開できる状態まで完成させる。
この状態になれば「index.htmlとビルドしたJSファイルが必要」と理解できる。
document.getElementById('root')rootがどこにもない。rootを書くべきhtmlが存在してない。
「フロントのJSはブラウザで表示したhtmlの中で動く」は最初に覚える常識。
こんな段階の常識が抜けてる質問。

go側でできることはこの「index.htmlとビルドしたJSファイル」を表示するだけ。

どう見てもReact使うのも早いレベルの初心者なので回答しても無駄だろうけど。

投稿2023/01/27 10:58

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

apprentice413

2023/01/27 16:52

ご自身の返答内容を受け取り手がどう感じるか考えない、最低の回答ですね。貴方のような方がIT業界からいなくなることを切に願います。
guest

0

ベストアンサー

見たところtsxを処理する仕組みがすっぽり抜け落ちた実装になってます。
質問にあるコードはGoの機能だけを使ったサーバーになっていて誰もtsxを処理することのないサーバー実装です。

Go側のサーバーとnodeやdenoなどの開発サーバーを両立させるか、Goサーバーのみでサービスするにはts側をあらかじめスタティックファイルに出力してしまう必要があります。

投稿2023/01/27 10:23

nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問