React+Electron+Vite+TypeScript+Leaflet

React+Electron+Vite+TypeScript

yarn create @quick-start/electron

以下のことを聴かれるので、適当な回答をする。

√ Project name: ... electron-app
√ Select a framework: » react
√ Add TypeScript? ... No / [Yes]
√ Add Electron updater plugin? ... No / [Yes]
√ Enable Electron download mirror proxy? ... No / [Yes]

できたプロジェクトディレクトリに入り.yarnrc.ymlがないので、追加して`yarn`する。

cd electron-app
echo "nodeLinker: node-modules" > .yarnrc.yml
yarn

Leaflet

Leafletをインストール。

yarn add leaflet react-leaflet
yarn add -D @types/leaflet

地図を表示

assets/base.cssassets/main.cssに追加するのが良いと思いますが、分かりやすくファイルを分けassets/simpleMap.cssとして分離させています。

/* 地図を画面全体に表示 */
.leaflet-container {
  width: 100vw;
  height: 100vh;
}

/* 通常カーソル */
.leaflet-grab {
  cursor: auto;
}

マップを作成。マーカーは福岡タワーに設定。

import { LatLng } from 'leaflet'
import 'leaflet/dist/leaflet.css'
import { MapContainer, Marker, Popup, TileLayer } from 'react-leaflet'
import './assets/simpleMap.css'

function App(): JSX.Element {
  const position = new LatLng(33.59337, 130.35152) // 福岡タワー

  return (
    <MapContainer center={position} zoom={13}>
      <TileLayer
        attribution='© <a href="https://maps.gsi.go.jp/development/ichiran.html">国土地理院</a>'
        url="https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png"
      />
      <Marker position={position}>
        <Popup>
          PopUp!! PopUp!! PopUp!! <br /> ポップアップ
        </Popup>
      </Marker>
    </MapContainer>
  )
}

export default App

セキュリティポリシーを変更。ネット上から画像を取得するので、img-srchttps:を追加

<!doctype html>
<html>

<head>
  <meta charset="UTF-8" />
  <title>Electron</title>
  <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
  <meta http-equiv="Content-Security-Policy"
    content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:" />
</head>

<body>
  <div id="root"></div>
  <script type="module" src="/src/main.tsx"></script>
</body>

</html>

実行する

yarn dev

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です