Coder Social home page Coder Social logo

stencil-helmet's Introduction

@stencil-community/helmet

Stencil Helmet

Declaratively update the <head> from a Stencil app.


This is a Stencil component meant to be used within Stencil apps to declaratively update the document <head>. You pass it elements that you'd normally place in <head>, and it updates <head> accordingly. Each instance will override duplicate tags from preceding instances.

Note that, because it uses virtual DOM as input, stencil-helmet can only be used within Stencil apps and not as a standalone web component.

Installation

npm install @stencil-community/helmet

Usage

import Helmet from '@stencil-community/helmet';

//...
export class MyComponent {
  render() {
    return (
      <div>
        <Helmet>
          <title>{this.title}</title>
          <meta name="description" content={this.description}/>
          <link rel="stylesheet" href="/styles.css"/>
        </Helmet>
      </div>
    );
  }
}

stencil-helmet's People

Contributors

andrii-bodnar avatar camwiegert avatar dependabot[bot] avatar jthoms1 avatar mikaelkaron avatar mlynch avatar perrygovier avatar rwaskiewicz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

stencil-helmet's Issues

Not working on Production environment

Hi there!

The library successfully updates all the metatags if it's running on the dev environment. But when it's running on Production - metatags are not updated.

The @stencil/helmet dependency is located in the "dependencies" object of the package.json file. Version - 0.3.2.

Any suggestions on what is wrong?

Thank you!

Dont re-use tags when route changes

Hi, I was trying your awesome plugin with @stencil/router, however I noticed, that If a certain route does not have a Helmet tag, previously declared tags just stay "online". This causes a few problems:

Current behavior
I have a page-not-found component, which will trigger if no other route matches the requested path. If I add a <meta name="robots" content="noindex, nofollow" /> to the 404 component and than go back to the homepage, the robots dont change. The only solution I found is to add <meta name="robots" content="index, follow"> to every route in my app, but this becomes very repetitive.

Desired behavior
Dont re-use previously declared tags, but simply remove them, which basically means we fall back to the original tags declared in index.html

Make render[tag] functions pure

Right now, all of the render functions append elements to the head directly. I'm thinking it might make more sense to return an element instead. That gets us:

  • Easier unit testing of renders functions
  • Simpler to map between states.
  • Could just use document.head.replaceChild.

Header is not updated during page navigation

Hi,

I'm currently playing with Stencils and the helmet plugin. I added the plugin to the "Sample App Template" and added some meta-tags on the different pages.

After "build --prerender", I see, that the page specific tags are properly added to the HTML output.

Current behavior

When I open one page and navigate to another, the page header is not updated. Only after a reload of that page, the actual page header is used.

Desired behavior

The page header as defined in the page's component shall immediately be applied during page navigation.

Update version

Can you please update the version to be compatible with the latest stencil version?
The version currently released on npmjs creates build errors with the childitems. I think the latest commits will fix this.

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.