DEV Community

Sebastián Aliaga
Sebastián Aliaga

Posted on • Updated on

Leveraging Sitecore JSS Tags for Seamless Integration with Next.js in XM Cloud

In the ever-evolving landscape of web development, integrating content management systems (CMS) with modern JavaScript frameworks has become a crucial aspect of creating dynamic and content-driven websites. Sitecore XM Cloud, paired with Next.js, offers a powerful combination for building scalable and performant web applications. One of the key elements in this integration is the use of Sitecore JSS tags such as , , , and . In this blog, we’ll explore the importance of using these tags and provide practical examples to illustrate their benefits.

Why Use Sitecore JSS Tags?

  • Seamless Content Integration: Sitecore JSS tags are designed to seamlessly integrate Sitecore-managed content into your Next.js application. These tags automatically handle the complexities of rendering different types of fields, ensuring that content is displayed correctly and consistently.

  • Enhanced Editor Experience: By using these tags, developers can leverage the full power of Sitecore’s Experience Editor. This allows content editors to see real-time previews and make in-context edits, improving the overall content management experience.

  • Consistency and Maintainability: Using standardized tags ensures consistency across the application. It reduces the chances of errors and makes the codebase more maintainable, as developers can rely on a common set of components to render Sitecore fields.

  • Automatic Handling of Attributes: Tags like and automatically handle essential attributes such as src, alt, href, and more, ensuring that accessibility and SEO best practices are followed without additional effort.

Key Sitecore JSS Tags and Their Usage

<Field> Tag

The <Field> tag is a versatile component used to render various types of fields, such as text, date, and more.

Example:

import React from 'react';
import { Field } from '@sitecore-jss/sitecore-jss-nextjs';

const MyComponent = ({ fields }) => (
  <div>
    <Field field={fields.title} tag="h1" className="page-title" editable={true} />
    <Field field={fields.description} />
  </div>
);

export default MyComponent;
Enter fullscreen mode Exit fullscreen mode

In this example, the <Field> tag is used to render a title as an <h1> element and a description as a default paragraph.

<RichText> Tag

The <RichText> tag is used to render rich text fields, handling HTML content stored in Sitecore.
Example:

import { RichText } from '@sitecore-jss/sitecore-jss-nextjs';

const MyComponent = ({ fields }) => (
  <div>
    <RichText field={fields.content} />
  </div>
);

export default MyComponent;
Enter fullscreen mode Exit fullscreen mode

Here, the <RichText> tag ensures that the rich text content is rendered correctly, preserving the HTML structure.

<Image> Tag

The <Image> tag is designed to render image fields, automatically handling attributes like src, alt, width, and height.

Example:

import { Image } from '@sitecore-jss/sitecore-jss-nextjs';

const MyComponent = ({ fields }) => (
  <div>
    <Image field={fields.image} />
  </div>
);

export default MyComponent;
Enter fullscreen mode Exit fullscreen mode

In this example, the <Image> tag renders an image with all necessary attributes managed automatically.

<Link> Tag

The <Link> tag is used to render link fields, ensuring that attributes like href and target are correctly set.

Example:

import { Link } from '@sitecore-jss/sitecore-jss-nextjs';

const MyComponent = ({ fields }) => (
  <div>
    <Link field={fields.link} />
  </div>
);

export default MyComponent;
Enter fullscreen mode Exit fullscreen mode

Here, the <Link> tag renders a link with proper handling of the href attribute and other link properties.

Utilities and Hooks

In addition to the core tags, Sitecore JSS provides various utilities and hooks to enhance the development experience when working with Sitecore XM Cloud and Next.js.

useSitecoreContext Hook

The useSitecoreContext hook provides access to the Sitecore context, including route data, language, and more. This is particularly useful for creating dynamic components that need to react to the context of the current page or item.

import { useSitecoreContext } from '@sitecore-jss/sitecore-jss-nextjs';

const ContextualComponent = () => {
  const { sitecoreContext } = useSitecoreContext();
  return <div>Current route: {sitecoreContext.route.name}</div>;
};

export default ContextualComponent;
Enter fullscreen mode Exit fullscreen mode

componentProps Utility

The componentProps utility is used to fetch component-level data during the build process, ensuring that all necessary data is available for rendering the component.

Example:

import { componentProps } from 'lib/page-props';

export const getStaticProps = async (context) => {
  const props = await componentProps(context);
  return {
    props: {
      ...props
    },
  };
};
Enter fullscreen mode Exit fullscreen mode

SitecorePageProps Type

The SitecorePageProps type definition ensures that the structure of page props is correctly typed when working with TypeScript, improving type safety and developer experience.

Example:

import { SitecorePageProps } from '@sitecore-jss/sitecore-jss-nextjs';

const MyComponent: React.FC<SitecorePageProps> = ({ fields }) => (
  <div>
    <Field field={fields.title} tag="h1" />
  </div>
);

export default MyComponent;
Enter fullscreen mode Exit fullscreen mode

Conclusion

Using Sitecore JSS tags like , , , and , along with the provided utilities and hooks, is essential for creating a seamless, maintainable, and editor-friendly web application when working with Sitecore XM Cloud and Next.js. These tags and utilities simplify the integration process and ensure that best practices for accessibility, SEO, and content management are followed. By leveraging these components, developers can build powerful and dynamic web applications that take full advantage of the capabilities offered by Sitecore and Next.js.

Feel free to experiment with these tags and utilities in your own projects to experience the benefits of a streamlined and efficient content integration process. If you have any questions or need further assistance, don’t hesitate to reach out!

Top comments (0)