から私はステートレスな機能コンポーネントがrecompose
からbranch
とrenderComponent
を使用するようにリファクタリングしています。使用ブランチは
元のコンポーネントは、次のようになります。
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
ライブラリー自体を必ずしも使用せずに、パターン再構成の奨励を使用することをお勧めします。 –
@BradfordMedeirosこれはひどい答えです。図書館に問題があっても、図書館を再考する必要はありません。再構成のポイントは、コードをより読みやすく、テスト可能にすることです。 –