Короткие и полезные заметки про React
const h = require("hyperscript");
document.body.appendChild(
h("div", { id: "content" },
h("div", { id: "child" },
h("p", null, "text")
)
)
);
Но такой код сложно читать и понимать. Для решения данной проблемы появился JSX. Он позволяет писать код похожий на HTML и транспилируется в JS. Например:
const el = (
<div id="content">
<div id="child">
<p>text</p>
</div>
</div>
);
// Транспилируется в следующий код:
const el = (React.createElement("div", { id: "content" },
React.createElement("div", { id: "child" },
React.createElement("p", null, "text"))));
Код похож на HyperScript, вместо h используется React.createElement. В TypeScript это можно изменить. Есть параметр jsxFactory, с помощью которого можно изменить JS функцию создания элемента. Например, можно использовать h из preact вместо React.createElement по умолчанию.
dodov.dev/blog/or…t-exists
import { Drawer } from 'vaul';
function MyComponent() {
return (
<Drawer.Root>
<Drawer.Trigger>Open</Drawer.Trigger>
<Drawer.Portal>
<Drawer.Content>
<p>Content</p>
</Drawer.Content>
<Drawer.Overlay />
</Drawer.Portal>
</Drawer.Root>
);
}
https://vaul.emilkowal.ski/
export function useDataTransition<T>(
real: T,
inTransition: boolean,
timeout: number
) {
const [timeExpired, setTimeExpired] = useState(false)
const cache = useRef(real)
useEffect(() => {
if (!inTransition) cache.current = real
}, [inTransition, real])
useEffect(() => {
let id: number
if (inTransition) {
id = setTimeout(() => setTimeExpired(true), timeout)
} else {
setTimeExpired(false)
}
return () => clearTimeout(id)
}, [inTransition, timeout])
if (inTransition && !timeExpired) return cache.current
else return real
}
www.jameskerr.blog/posts/u…ansition
const CurrentUserContext = React.CreateContext<User | null>(null)
export const useCurrentUserContext = () => {
const currentUser = React.useContext(CurrentUserContext)
if (!currentUser) {
throw new Error('CurrentUserContext: No value provided')
}
return currentUser
}
export const CurrentUserContextProvider = ({
children,
}) => {
const currentUserQuery = useCurrentUserQuery()
// --snip--
return (
<CurrentUserContext.Provider value={currentUserQuery.data}>
{children}
</CurrentUserContext.Provider>
)
}
tkdodo.eu/blog/re…-context