Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
@solid-primitives/refs
Advanced tools
Library of primitives, components and directives for SolidJS that help managing references to JSX elements.
Collection of primitives, components and directives that help managing references to JSX elements, keeping track of mounted/unmounted elements.
elements
- Reactive signal that filters out non-element items from a signal array. (Can be used with children
primitive)refs
- Get signal references to Elements of the reactive input. Which were added, which were removed. (Can be used with children
primitive)mapRemoved
- Similar to Solid's mapArray
, but you map the elements that were removed from source array. Leting you keep them for longer.unmount
- A directive that calls handler when the element get's unmounted from DOM.<Children>
- Solid's children
helper in component form. Access it's children elements by get
property.<Refs>
- Get up-to-date references of the multiple children elements.<Ref>
- Get up-to-date reference to a single child element.getChangedItems
- Tells you which elements got added to the array, and which got removedgetAddedItems
- Tells you elements got added to the arraygetRemovedItems
- Tells you which elements got removed from the arraynpm install @solid-primitives/refs
# or
yarn add @solid-primitives/refs
elements
Reactive signal that filters out non-element items from a signal array. (Can be used with children
primitive)
import { elements } from "@solid-primitives/refs";
const resolved = children(() => props.children);
const els = elements(resolved);
els(); // T: Element[]
// or narrow down the element type
const divs = elements(resolved, HTMLDivElement);
divs(); // T: HTMLDivElement[]
refs
Get signal references to Elements of the reactive input. Which were added, which were removed. (Can be used with children
primitive)
Used internally by <Refs>
component.
import { refs } from "@solid-primitives/refs";
const resolved = children(() => props.children);
const [els, added, removed] = refs(resolved);
els(); // T: Element[]
added(); // T: Element[]
removed(); // T: Element[]
// or narrow down the element type
const [els, added, removed] = refs(resolved, HTMLDivElement);
els(); // T: HTMLDivElement[]
added(); // T: HTMLDivElement[]
removed(); // T: HTMLDivElement[]
mapRemoved
Reactively map removed items from a reactive signal array. If the mapping function return an element signal, this element will be placed in the array returned from primitive.
import { combined } from "@solid-primitives/refs";
const MyComp = props => {
const resolved = children(() => props.children);
const combined = mapRemoved(resolved, (ref, index) => {
const [el, setEl] = createSignal(ref);
// apply styles/animations to removed element
ref.style.filter = "grayscale(100%)";
// computations can be created inside the mapping fn
createEffect(() => {
// index is a signal
index();
});
const remove = () => {
// ...later
// by setting returned signal to undefined
// element get's removed from combined array permanently
setEl(undefined);
};
// you can return a signal with element to keep it in the combined array
return el;
});
return combined;
};
unmount
A directive that calls handler when the element get's unmounted from DOM.
import { unmount } from "@solid-primitives/refs";
// place it somewhere in the code to prevent it from being tree-shaken
unmount;
const [ref, setRef] = createSignal<Element | undefined>();
<div ref={el => setRef(el)} use:unmount={() => setRef(undefined)}>
Hello
</div>;
<Children>
Solid's children
helper in component form. Access it's children elements by get
property.
import {Children, ResolvedJSXElement} from "@solid-primitives/refs"
// typing as JSX.Element also works
const [children, setChildren] = createSignal<ResolvedJSXElement>([])
<Children get={setChildren}>
<div></div>
...
</Children>
<Ref>
Get up-to-date reference to a single child element.
import { Ref } from "@solid-primitives/refs";
<Ref>
accepts these properties:
ref
- Getter of current element (or undefined
if not mounted)onMount
- handle the child element getting mounted to the domonUnmount
- handle the child element getting unmounted from the domconst [ref, setRef] = createSignal<Element | undefined>();
<Ref
ref={setRef}
onMount={el => console.log("Mounted", el)}
onUnmount={el => console.log("Unmounted", el)}
>
<Show when={show()}>
<div>Hello</div>
</Show>
</Ref>;
<Ref<HTMLDivElement>
ref={el => {...}} // HTMLDivElement | undefined
onMount={el => {...}} // HTMLDivElement
onUnmount={el => {...}} // HTMLDivElement
>
<div>Hello</div>
</Ref>
<Refs>
Get up-to-date references of the multiple children elements.
import { Refs } from "@solid-primitives/refs";
<Refs>
accepts these properties:
refs
- Getter of current array of elementsadded
- Getter of added elements since the last changeremoved
- Getter of removed elements since the last changeonChange
- handle children changesconst [refs, setRefs] = createSignal<Element[]>([]);
<Refs
refs={setRefs}
added={els => console.log("Added elements", els)}
removed={els => console.log("Removed elements", els)}
onChange={e => console.log(e)}
>
<For each={my_list()}>{item => <div>{item}</div>}</For>
<Show when={show()}>
<div>Hello</div>
</Show>
</Refs>;
<Refs<HTMLDivElement>
refs={els => {}} // HTMLDivElement[]
added={els => {}} // HTMLDivElement[]
removed={els => {}} // HTMLDivElement[]
// { refs: HTMLDivElement[]; added: HTMLDivElement[]; removed: HTMLDivElement[] }
onChange={e => {}}
>
<div>Hello</div>
</Refs>
https://stackblitz.com/edit/solid-vite-unocss-bkbgap?file=index.tsx
(run npm start
in the terminal)
0.0.100
Initial release as a Stage-1 primitive.
FAQs
Library of primitives, components and directives for SolidJS that help managing references to JSX elements.
The npm package @solid-primitives/refs receives a total of 54,391 weekly downloads. As such, @solid-primitives/refs popularity was classified as popular.
We found that @solid-primitives/refs demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 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
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.