2つのコンポーネントが同じメソッドを共有していてレイアウトが異なる場合、同じコードを書くことを避けるにはどうすればよいですか?レイアウトが異なるコンポーネントに同じロジックを書き込まないようにするにはどうすればよいですか?
以下のサンプルコンポーネントには、親コンポーネントが渡したprop "something"を使用するメソッド "renderLastItem"があります。
Higher Order Component Patternを使用することを考えましたが、Higher Order Componentの引数として小道具を渡すことはできません。
以下のサンプルコードは非常にシンプルなので、このサンプルコードでは、If文を使用してコンポーネントのタイプに応じてレイアウトを変更するだけで、実際のコードではコードが増え、避けたいif文を使用して、コンポーネントのタイプに応じてレイアウトを変更します。
同じロジックを複数のコンポーネントに書き込まないようにするにはどうすればよいですか?
ComponentA
import React, { Component } from 'react';
import PropTypes from 'prop-types';
const propTypes = {};
const defaultProps = {};
class SampleA extends Component {
constructor(props) {
super(props);
}
renderLastItem() {
if(!this.props.something) {
return null;
}
return this.props.something[this.props.something.length - 1];
}
render() {
return (
<div>
<h1>Something</h1>
<p>{this.renderLastItem()}</p>
</div>
);
}
}
SampleA.propTypes = propTypes;
SampleA.defaultProps = defaultProps;
export default SampleA;
ComponentB
import React, { Component } from 'react';
import PropTypes from 'prop-types';
const propTypes = {};
const defaultProps = {};
class SampleB extends Component {
constructor(props) {
super(props);
}
renderLastItem() {
if(!this.props.something) {
return null;
}
return this.props.something[this.props.something.length - 1];
}
render() {
return (
<div>
<ul>
<li>Something</li>
<li>Something else</li>
<li>{this.renderLastItem()}</li>
</ul>
</div>
);
}
}
SampleB.propTypes = propTypes;
SampleB.defaultProps = defaultProps;
export default SampleB;
ありがとう!だから私の例では、私はshouleコードを書き出す "エクスポートのデフォルト( )"? –
hytm
このパターンのすばらしい点の1つは、コンポーネントに固有の概念として適用することができます。その場合は、そういったことをするか、コンポーネントの親に固有の概念として適用します。あなたはレンダリング時にそれを適用するだけです。どちらがあなたにとって最も理にかなっています! – Hamms