Edit documentation Edit document
SSR/SSG

GHComponent Features

Every component inherited from GHComponent includes these features:

Content

Environment Variable

Each component determines its environment (either client or server) based on the current execution context. This can be used to execute code specific to the client or server:

this.environment === 'client' || 'server';
  • Server: Suitable for HTML rendering or initializing GudHub.
  • Client: Suitable for event listeners, sliders, and other browser-specific actions.

GudHub Library

  • On the server, GudHub is automatically initialized using the auth-key from the site configuration.
  • On the client, you can create an instance of GudHub as needed.

Server-Side Attribute Handling

  • Adding the to-be-removed attribute to a component will cause it to be stripped on the server, leaving only the inner HTML on the client. Note: This will break the component's functionality and remove its <script> tag. If the component appears multiple times on a page, only the first instance will work.

Text Replacement with gh-id

  • Elements inside the component with a gh-id (path to data in json object) attribute will have their inner text replaced by corresponding data from GudHub's JSON document.
  • This replacement happens during server-side rendering or as the component loads on the client.

Example:

<span gh-id="example.text"></span>
  • To fetch data, ensure a JSON editor is configured in the GudHub application for the relevant page.

Template Rendering

  • Components can use the render method to dynamically generate their content based on a provided template and the component's data:
this.render(`<div>${this.someData}</div>`);
  • This method supports:
    • Looping via gh-for attributes.
    • Binding component properties to the template.

Event Handling

  • Automatically binds event listeners specified in attributes (e.g., onclick, onchange) to their corresponding methods in the component.
  • Arguments passed to these methods can include:
    • Evaluated JavaScript expressions.
    • Component properties.

GudHub Data Handling

  • Fetching Data: Use getGhData(ghId, chapter, slug) to retrieve data from GudHub's JSON document by gh-id.
  • Adding Data: Use addGhData(ghId, data, chapter, slug) to insert new data into GudHub's JSON document.
  • Default Data: Define a default template for a component's data using setDefaultData(data).

Utility Methods

  • replaceText(slug): Replaces all gh-id elements' inner HTML with data from GudHub JSON documents.
  • findValueByPath(json, path): Fetches a nested value in an object using a dot-separated string path.
  • findIds(application, slug): Finds the appId and itemId for the corresponding GudHub application or slug.
  • activateListeners(): Binds events to elements inside the component.

Error Handling

  • Use the error(err) method to reject the component's rendering promise if an error occurs during rendering.

By leveraging these features, GHComponent provides a powerful foundation for creating GudHub-integrated components with robust client-server functionality.