On page core/signals-and-reactive-functions i see next example
const useDropdownState = () => {
const [isOpen, setIsOpen] = useState(false);
const toggleIsOpen = () => {
setIsOpen((isOpen) => !isOpen);
};
return {
isOpen,
toggleIsOpen,
};
};
export const Dropdown = ({ children }: { children: React.ReactNode }) => {
const { isOpen, toggleIsOpen } = useDropdownState();
return (
<div ref={ref}>
<button onClick={toggleIsOpen}>Toggle</button>
{isOpen && <div>{children}</div>}
</div>
);
};
Why ref needed here and how we get it?
import { component, reactive, signal } from 'signalium';
import { useState } from 'react';
const getDropdownState = reactive((id: string) => {
const isOpen = signal(false);
const setIsOpen = (isOpen: boolean) => {
isOpen.value = isOpen;
};
const toggleIsOpen = () => {
setIsOpen((isOpen) => !isOpen);
};
});
let DROPDOWN_ID = 0;
// Note: We'll cover the component helper later on in the React section, for now
// just know that it's a function that makes a React component reactive
export const Dropdown = component(({ children }: { children: React.ReactNode }) => {
const id = useState(DROPDOWN_ID++);
const { isOpen, toggleIsOpen } = getDropdownState(id);
return (
<div ref={ref}>
<button onClick={toggleIsOpen}>Toggle</button>
{isOpen && <div>{children}</div>}
</div>
);
});
why reactive declare id: string argument but never use it?
and why it not return anything?
On page
core/signals-and-reactive-functionsi see next exampleWhy
refneeded here and how we get it?why reactive declare id: string argument but never use it?
and why it not return anything?