Skip to content

Instantly share code, notes, and snippets.

View souporserious's full-sized avatar

Travis Arnold souporserious

View GitHub Profile
function PageView({ children, currentViewIndex }) {
const frameSize = useMotionValue('auto')
const useMeasureRef = useMeasureEffect(
viewNodes => {
const viewMeasurements = viewNodes.map(node =>
node.getBoundingClientRect()
)
const nextFrameSize = viewMeasurements[currentViewIndex]
frameSize.set(nextFrameSize)
},
@souporserious
souporserious / use-refs.js
Created February 11, 2020 20:31
Collect refs indexed based on their position in the React tree
import {
useCallback,
useLayoutEffect,
useRef,
useEffect,
useState,
} from 'react'
import mitt from 'mitt'
export function useRefs() {
@souporserious
souporserious / use-measure-example.jsx
Last active February 29, 2020 15:23
use-measure hook for collecting component measurements
// Handle outside and local measurements easily
function Singular({ ref, value }) {
const [width, setWidth] = useState(-1)
const [useMeasureRef, useMeasureEffect] = useMeasure()
useMeasureRef(ref)
useMeasureEffect(
([node]) => {
setWidth(node.offsetWidth)
},
[value]
import { useCallback } from 'react'
import useConstant from 'use-constant'
import mitt from 'mitt'
function useMitt() {
const emitter = useConstant(() => mitt())
return {
emitEvent: emitter.emit,
useEvent: useCallback((eventName, onEvent) => {
useEffect(() => {
// hooks
function App() {
const ref = React.useRef(null)
const [height, setHeight] = React.useState(-1)
React.useLayoutEffect(() => {
setHeight(ref.current.offsetHeight)
}, [])
return <div ref={ref}>Height: {height}</div>
}
@souporserious
souporserious / use-ref-manager.js
Created April 1, 2020 17:07
Hook to manage collections of refs in React.
import { useCallback, useRef } from 'react'
export function useRefManager() {
const storedRefs = useRef({})
const refCallbacks = useRef({})
const getRef = useCallback(id => {
if (!refCallbacks.current[id]) {
refCallbacks.current[id] = ref => {
if (!storedRefs.current[id] && ref) {
storedRefs.current[id] = ref
@souporserious
souporserious / example.jsx
Last active April 24, 2020 22:13
Sync scroll positions between multiple elements.
import * as React from 'react'
import { useScrollSync } from 'use-scroll-sync'
function App() {
const ref1 = React.useRef()
const ref2 = React.useRef()
useScrollSync(ref1, ref2)
return (
<div>
<div ref={ref1} />
@souporserious
souporserious / md-to-mdx.js
Last active May 14, 2020 00:31
Converts Markdown files to MDX while also rewriting the live tag.
const fs = require('fs')
const glob = require('glob')
const del = require('del')
const unified = require('unified')
const markdown = require('remark-parse')
const stringify = require('remark-stringify')
const frontmatter = require('remark-frontmatter')
// https://unifiedjs.com/learn/guide/using-unified/
const processor = unified()
import React from 'react'
import './styles.css'
const OverridesContext = React.createContext({})
function Override({ inherit, value, children }) {
const overrides = React.useContext(OverridesContext)
return (
<OverridesContext.Provider
value={inherit ? { ...value, ...overrides } : value}
@souporserious
souporserious / jsxui.jsx
Last active January 26, 2021 07:50
JSXUI core components sketch
const App = () => (
<Variants dark="@media (prefers-color-scheme: dark)">
<Theme
colors={{ foreground: '#111', background: '#fff' }}
variants={{
dark: {
colors: { foreground: '#eee', background: '#222' },
},
}}
>