Code Monkey home page Code Monkey logo

Comments (4)

DavideCarvalho avatar DavideCarvalho commented on May 15, 2024

An example if you need

// hello.js
class Hello extends HTMLElement {
  constructor() {
    super();
    if (!this.shadowRoot) {
      this.attachShadow({ mode: "open" }).innerHTML = `
        Hello World from SSR Web Components <slot></slot>!
      `;
    }
  }
}
customElements.define("x-hello", Hello);
module.exports = Hello;
server.route({
  method: "GET",
  path: "/hello",
  handler(request, response) {
    const hello = `./pages/hello.js`;
    const Hello = fs.existsSync(hello)
      ? require(hello)
      : require("./pages/404.js");
    return render(Object.assign(new Hello(), request.params));
  }
});

This is how we do with Web Components, but I need a class to do it, if hybrids' define methods returned a class, this would be easy

from hybrids.

smalluban avatar smalluban commented on May 15, 2024

Yes, it does, but only if you use define function. However, it not only creates a class, but also use customElements.define to register it in the document. I think you want to avoid it on the server side.

When I was designing API, I haven't SSR in mind, so I assumed that the library will be only executed in the browser environment. Because of that, some of the factories calls DOM APIs on the module level, for example parent factory here. Also, I encourage you to look at the #18 issue. It explains lazy approach to render in the hybrids. I think that your skatejs solution would produce empty internal structure (if you would have your required class).

Of course, you can experiment with SSR if you want. With the current code you need to polyfill document.addEventListener and customElements.define methods - they don't have to do anything, just define them in the global scope. With those changes, you can call define function from the hybrids, and this function returns class constructor, which you want.

from hybrids.

DavideCarvalho avatar DavideCarvalho commented on May 15, 2024

I tried doing it with Hybrids, and an error was thrown
image

from hybrids.

smalluban avatar smalluban commented on May 15, 2024

I didn't mean that it is easy :P. Unfortunately, I have no time now to focus on SSR. I am in the middle of a big rewrite of the documentation.

What I can recommend you is to follow errors and try to create structures that will fix them. The attached screenshot shows that event listener callback requires the event argument to support composedPath method.

I think you may try to use dom-js or another project, which adds DOM API to the nodejs.

If you find a solution feel free to re-open and show your results! Happy coding!

from hybrids.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.