HOC는 컴포넌트의 props로 컴포넌트를 받아 새로운 컴포넌트를 생성하는것이다.
const EnhancedComponent = higherOrderComponent(WrappedComponent);
withLoading.jsx (2초동안 로딩하게 해주는 컴포넌트)
import React, { useState, useEffect } from 'react'
export default function withLoading(Component) {
const WithLoadingComponent = props => {
const [loading, setLoading] = useState(true)
useEffect(() => {
const timer = setTimeout(() => setLoading(false), 2000)
return () => clearTimeout(timer)
}, [])
return loading ? <p>loading...</p> : <Component {...props} />
}
return WithLoadingComponent
}
Input과 Button에 로딩 적용하기
import React from 'react'
import withLoading from './withLoading'
function Input() {
return <input defaultValue="input" />
}
export default withLoading(Input)
import React from 'react'
import withLoading from './withLoading'
function Button() {
return <button>button</button>
}
export default withLoading(Button)