branch
및 renderComponent
을 recompose
에서 사용하기 위해 무국적 기능 구성 요소를 리팩터링합니다.재구성 지점 사용
원래의 구성 요소는 다음과 같습니다
const Icon = props => {
const { type, name } = props
let res
if (type === 'font') {
return (<FontIcon name={name} />)
} else if (type === 'svg') {
res = (<SvgIcon glyph={name} />)
}
return res
}
분기 구성 요소는 다음과 같습니다 결과
<Icon name='crosshairs' type='font' />
:
const isFont = props => {
const { type } = props
return type === 'font'
}
const FontIconHoC = renderComponent(FontIcon)
const SvgIconHoC = renderComponent(SvgIcon)
const Icon = branch(isFont, FontIconHoC, SvgIconHoC)
Icon.propTypes = {
type: string,
name: string
}
export default Icon
가 내가 사용하려고하고 구성 요소를 렌더링 오류는 다음과 같습니다.
invariant.js:44Uncaught Error: Icon(...): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.
질문의 목적은 문서에서 가지를 사용하는 방법을 파악하는 것이 었습니다. 그것은 나 자신을 위해하고있는 탐험적인 일이다. 브랜치가 제한적으로 사용되는 것에 동의하는 동안, 내가 정말로 흥분하고있는'withHandlers'와'withReducer'와 같은'재구성 (recompose) '의 유틸리티가 있습니다. 거대한 React 구성 요소를 더 작은 상태 비 저장 구성 요소로 리팩토링 할 때 정말 도움이되었습니다. – vamsiampolu
필자는 라이브러리 자체를 사용하지 않고 recompose 패턴을 사용하는 것을 권장한다. –
@BradfordMedeiros 이것은 끔찍한 대답이다. 도서관에 어려움이 있다고해서 반드시 도서관을 재고해야한다고해서는 안됩니다. 재구성의 요점은 코드를보다 쉽게 읽고 테스트 할 수있게 만드는 것입니다. –