![require(esm) Backported to Node.js 20, Paving the Way for ESM-Only Packages](https://cdn.sanity.io/images/cgdhsj6q/production/be8ab80c8efa5907bc341c6fefe9aa20d239d890-1600x1097.png?w=400&fit=max&auto=format)
Security News
require(esm) Backported to Node.js 20, Paving the Way for ESM-Only Packages
require(esm) backported to Node.js 20, easing the transition to ESM-only packages and reducing complexity for developers as Node 18 nears end-of-life.
ember-curry-component
Advanced tools
Like Ember's builtin `(component)` helper, but with dynamic arguments, and JS compatibility
Like Ember's builtin (component)
helper, but with dynamic arguments, and JS compatibility.
ember install ember-curry-component
import Component from "@glimmer/component";
import { getOwner } from "@ember/owner";
import curryComponent from "ember-curry-component";
import SomeOtherComponent from "./some-other-component";
class MyComponent extends Component {
get curriedComponent(){
const args = {
name: "David"
};
return curryComponent(SomeOtherComponent, args, getOwner(this))
}
<template>
<this.curriedComponent />
</template>
}
import Component from "@glimmer/component";
import { getOwner } from "@ember/owner";
import curryComponent from "ember-curry-component";
import SomeOtherComponent from "./some-other-component";
class MyComponent extends Component {
@tracked name = "David";
get curriedComponent() {
const instance = this;
const args = {
get name() {
return instance.name;
}
};
return curryComponent(SomeOtherComponent, args, getOwner(this));
}
<template>
<this.curriedComponent />
</template>
}
When this.name
is reassigned, the @name
argument on the curried component will be invalidated. The curriedComponent
getter will not be re-evaluated.
import Component from "@glimmer/component";
import { getOwner } from "@ember/owner";
import curryComponent from "ember-curry-component";
import SomeOtherComponent from "./some-other-component";
class MyComponent extends Component {
@tracked name = "David";
get curriedComponent(){
const args = {
name: this.name
};
return curryComponent(SomeOtherComponent, args, getOwner(this));
}
<template>
<this.curriedComponent />
</template>
}
When this.name
is reassigned, the curriedComponent
getter will be invalidated, and the curried component will be completely rerendered.
In .gjs
/.gjs
files, the curryComponent helper can be used directly in a template. In this case, the owner does not need to be passed explicitly.
import SomeOtherComponent from "./some-other-component";
const args = { name: "david" }
<template>
{{#let (curryComponent MyComponent args) as |curriedComponent|}}
<curriedComponent />
{{/let}}
</templates>
In <template>
, curried components cannot be rendered from the local scope. This will fail:
// Do not copy!
const curried = curryComponent(MyComponent, args, owner)
<template><curried /></template>
You must wrap the invocation in {{#let}}
instead:
// Do not copy!
const curried = curryComponent(MyComponent, args, owner)
<template>
{{#let curried as |myComponent|}}
<myComponent />
{{/let}}
</template>
See the Contributing guide for details.
This project is licensed under the MIT License.
FAQs
Like Ember's builtin `(component)` helper, but with dynamic arguments, and JS compatibility
We found that ember-curry-component demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
require(esm) backported to Node.js 20, easing the transition to ESM-only packages and reducing complexity for developers as Node 18 nears end-of-life.
Security News
PyPI now supports iOS and Android wheels, making it easier for Python developers to distribute mobile packages.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.