DEV Community

Cover image for Nuxt and WPGraphQL
Sul
Sul

Posted on

6

Nuxt and WPGraphQL

I'm at a loss. I have tried for days going in circle and I feel like I am going crazy. I should explain I am mainly a designer that lives in Figma and I have been trying to get an understanding of Vue and Nuxt and thought of updating my portfolio, so please excuse me if I should like I have no idea :P

I'm trying to pull in the contents of a WordPress headless CMS into a Nuxt3 site. I can get all of the content to show via {{ data }} but I just can't seem to show simple things like the site title or a list of the five latest posts.

https://test.cms.sulei.dev/graphql is the test GQL endpoint and seems ok from what I have tested.

I have tried various ways to pull in the data:

  • nuxt-graphql-client
  • nuxt-apollo
  • usefetch

This is an example of the index page where I have tried to just show the Site Title from WP

<template>
  <div id="front-page" class="prose">
    <h1 class="bg-gray">Nuxt3 ❤️ GraphQL</h1>
    <p>{{ getHeader.siteTitle }}</p>
  </div>
</template>

<script lang="ts" setup>
import { ref } from "vue";
import useQuery from "@nuxtjs/apollo";
import gql from "graphql-tag";

const siteTitle = ref("");
const siteTitleQuery = gql`
  query siteTitle {
    getHeader {
      siteTitle
    }
  }
`;

const { data } = await useAsyncQuery(siteTitleQuery);
</script>
Enter fullscreen mode Exit fullscreen mode

Literally ANY guidance or a point in the right direction would be super helpful - Thank you 🤗

Sul

Sentry blog image

How to reduce TTFB

In the past few years in the web dev world, we’ve seen a significant push towards rendering our websites on the server. Doing so is better for SEO and performs better on low-powered devices, but one thing we had to sacrifice is TTFB.

In this article, we’ll see how we can identify what makes our TTFB high so we can fix it.

Read more

Top comments (2)

Collapse
 
sulcalibur profile image
Sul

Now the next hurdle is figuring out how I list the latest 5 posts.

This is what I have at the moment but no posts are showing:

<template>
  <div>
    <h1>Latest Posts</h1>
    <ul>
      <li v-for="post in latestPosts" :key="post.id">
        <h2>{{ post.title }}</h2>
        <p>{{ post.excerpt }}</p>
        <small>{{ post.date }}</small>
      </li>
    </ul>
  </div>
</template>

<script lang="ts" setup>
import useQuery from "@nuxtjs/apollo";
import gql from "graphql-tag";

const latestPostsQuery = gql`
  query LatestPosts {
    posts(first: 5) {
      nodes {
        id
        title
        excerpt
        date
      }
    }
  }
`;

const { data } = await useAsyncQuery(latestPostsQuery);

const latestPosts = data?.posts?.nodes || [];
</script>
Enter fullscreen mode Exit fullscreen mode
Collapse
 
sulcalibur profile image
Sul

Wooo managed it!! It was just a case of adding 'data' to the code: {{ data.getHeader.siteTitle }}

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay