Custom Hooks - rkaku/react-hooks-101 GitHub Wiki

Higher Order Component

const HigherOrderComponent = BaseComponent => props {
  const addProps = { style: { color: "green" } }
  const newProps = { ...props, ...addProps }
  return <BaseComponent { ...newProps } />
}
const HigherOrderComponent = BaseComponent => props {
  delete props.style
  const newProps = { ...props }
  return <BaseComponent { ...newProps } />
}

React

const React = (function() {
  let _val

  return {
    render(Component) {
      const Comp = Component()
      Comp.render()

      return Comp
    },
    useState(init) {
      _val = _val || init

      function setState(newVal) {
        _val = newVal
      }

      return [_val, setState]
    }
  }
})()
function AppComp() {
  const [age, setAge] = React.useState(21)
  return {
    render() {
      console.log(age)
    },
    ageUp() {
      setAge(age + 1)
    }
  }
}
let App
App = React.render(AppComp)
App.ageUp()
React.render(AgeComp)

useState

function useState(init) {
  let _val = init

  return [
    _val,
    (newVal) => {
      _val = newVal
    }
  ]
}

useReducer

function useReducer(reducer, initialState) {
  const [state, setState] = useState(initialState)

  function dispatch(action) {
    const nextState = reducer(state, action)
    setState(nextState)
  }

  return [state, dispatch]
}

useAxios


Component

const { loading, error, data } = useAxios(GET)

if (loading) return 'Loading...'

if (error) return `Error :( ${error}`
  const [recipientID, setRecipientID] = useState(1)
  const isRecipientOnline = useFriendStatus(recipientID)
const [dog, setDog] = useState(null)

const [getDog, { loading, data }] = useLazyAxios(GET_DOG_PHOTO)


if (data && data.dog) setDog(data.dog);

{dog && <img src={dog.displayImage} />}

<button onClick={() => getDog({ variables: { breed: 'bulldog' } })}>