LoginSignup
code-shm
@code-shm

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

クライアントで動くJavaScriptをコンポーネント内に書いた場合のデメリット

DiscussionClosed

最近Astroを導入し始めたAstro初心者です。
Webフレームワークはほとんど触ってこなかったので断片的な知識しかなく、経験者の皆さんが考える最適解をお聞きしたいです。
AstroでWebサイトを構築する場合、クライアントで動くJavaScriptの記載場所は何通りかあると思います。

1. importする

例えば以下のようにLayout.astroで別のJavaScriptファイルimportして使い、別のファイルで管理する場合もあります。

Layout.astro
---
// Layout.astro
---
<!doctype html>
<html lang="jp">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
        <title>テスト</title>
        <meta name="description" content="">
    </head>
    
    <body>
        <p>テスト</p>
        <script>
          import "../assets/js/script";
        </script>
    </body>
</html>

2. コンポーネントファイル内に書く

またコンポーネントファイル内に書いてしまう場合もあると思います。

Message.astro
---
// Message.astro
---

<div class="message">
  <div class="message-header">
    <p>テスト</p>
    <button class="delete" aria-label="delete"></button>
  </div>
  <div class="message-body">
    <p>テキストテキストテキスト</p>
  </div>
</article>

<style lang="scss">
  .message-header {
    p {
      color: red;
    }
  }
</style>

<script>
  const deleteBtn = document.querySelector('.delete');
  deleteBtn.addEventListener('click', (e) => {
    const body = e.currentTarget.closest('.message');
    body.remove();
  });
</script>

場合によったり、1と2の併用というパターンもあると思いますが、クライアントで動くJavaScriptの記載場所については2のコンポーネント内に書いた場合のデメリットは何かありますでしょうか?
今後Astroを導入していくにあたって、JavaScriptの記載場所はルール化していきたいと思っています。

説明がつたなく、伝わらない部分があるかもしれませんが、よろしくお願いいたします。

1

コンポーネントでも export は利くので好きな方でよいのでは?みたいなところあります。
ただ、.ts だけで済ませた方がいい場合もあるので .astro で コンポーネント(やその関連関数/IF)以外の export は微妙かな感はあります。

1

@juner さん
ご回答ありがとうございます。
確かに好みによるのかもしれませんね。
コンポーネント以外のページファイルなどに書くのは私も微妙だと思っていたので、書くとしてもコンポーネントに留めておいて、共通処理はtsファイルの方に書くなどしてみます。

2

Your answer might help someone💌