dbd_fish
@dbd_fish

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

記事一覧みたいなページを作りたいです。

目的

Vue3、Vutify3、Vue router3、piniaを用いてブログを作成しようとしています。
ブログの記事一覧ページを作成したいのですが、
きれいな作成方法が浮かびません。

下記に記載する現状とは異なる方法など、フロントに詳しい方のご意見がお聞きしたいです。

目標

下記画像のような各記事のタイトルを収集して記事一覧を表示できるようにしたいです。
image.png

現状

現状、piniaを使って記事リストをstate内に保存して、v-cardとv-forで表示しています。
image.png

画像のコードについては下記の通りです。

store_main.js
import { defineStore } from 'pinia';


export const useStoreMain = defineStore('store_main', {
  state: () => ({
    now_page: "home",
    省略
    job_article_card_list: [
      { card_name: '仕事関連記事_テスト1', card_path: 'job_article_test1' },
      { card_name: '仕事関連記事_テスト2', card_path: 'job_article_test2' },
    ],
  }),
  actions: {
    update_now_page(update_page) {
      this.now_page = update_page;
    },
  }
});
job_article_list.vue
<template>
  <v-app>
    <v-app-bar >
     省略
    </v-app-bar>
     省略
    <v-main>
      <div class="md">
        仕事関連の記事
      </div>
      <v-card v-for="job_article_card in StoreMain.job_article_card_list" :key="job_article_card.card_name"
        :value="job_article_card.card_name" :to="{ name: job_article_card.card_path }" class="article_list">
        {{ job_article_card.card_name }}
      </v-card>
    </v-main>
  </v-app>
</template>

<script setup>
import { useStoreMain } from '@/stores/store_main';

const StoreMain = useStoreMain();
StoreMain.update_now_page("仕事関連の記事");

</script>
<script>
import profile_card from "@/components/profile_card.vue";
import adsense_card from "@/components/adsense_card.vue";

export default {
  components: {
    profile_card,
    adsense_card,
  },
}

</script>

<style>
.article_list {
  width: 500px;
  height: 300px;
  margin: 2rem;
  background-color: #f5f5f5;
}
</style>

0

1Answer

第1階層 記事、質問、いいね (pinia状態管理)
第2階層 投稿した記事、コメントした記事、編集リクエストした記事 (pinia状態管理)
第3階層 各記事 (クライアント表示)

記事、質問、いいね、投稿した記事、コメントした記事、編集リクエストした記事、の違いを状態として管理し、記事の中身の違いはクラスの継承で埋める。

1Like

Comments

  1. @dbd_fish

    Questioner

    @HalHarada
    ご回答ありがとうございます!
    pinia状態管理ということは、stateに状態を保持しして管理するため、
    現状とほぼ同じような方法という認識でよろしいでしょうか?

  2. ものの見方、方向の違いですから、結果として概ねあっています。

    export const useStoreMain = defineStore('store_main', {
      state: () => ({
        now_page: "home",
    

    now_page: "home" ページ名はアクションの結果の状態です。投稿者の書き込んだ状態に意識した管理です。
     結果として概ねあっていますが?

  3. @dbd_fish

    Questioner

    ありがとうございます!
    色々試行錯誤して見ようと思います:bow_tone2:

Your answer might help someone💌