Reusable Template Literals: Exposing the Hidden Potential
While template literals in ES6 are extensively utilized, the perception persists that they are eternally bound to the moment of their creation, lacking the flexibility to be reused and dynamically updated. This article challenges that notion, exploring the possibility of transforming template literals into reusable and dynamic documents.
The essence of a traditional template lies in the ability to inject tokens at runtime, evaluable whenever necessary. However, ES6 template literals appear to evaluate their substitutions at declaration time, limiting their practicality.
The Essential Catalyst: The Function Constructor
To overcome this apparent limitation, we employ the Function constructor as an intermediary. By utilizing this construct, we can defer the interpolation process until the function is invoked:
const templateString = "Hello ${this.name}!"; const templateVars = { name: "world", }; const fillTemplate = function (templateString, templateVars) { return new Function( "return `" templateString "`;" ).call(templateVars); }; console.log(fillTemplate(templateString, templateVars));
In this example, the fillTemplate function accepts the template string and a set of variables to be interpolated. Within the function, we construct a function that, when executed, returns the template string with the values from templateVars injected at runtime.
Benefits of Reusable Template Literals
The resulting reusable template literals offer numerous advantages:
While this solution introduces certain limitations, such as the inability for inline JavaScript logic, workarounds can be developed.
Conclusion
By employing the Function constructor, we unlock the true potential of ES6 template literals. We transform them from static strings to reusable, dynamic templates, opening up new possibilities for code organization and flexibility. While the journey to fully recreate the functionality of traditional template engines continues, this technique provides a robust foundation for extending the capabilities of template literals.
Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.
Copyright© 2022 湘ICP备2022001581号-3