私はrenderer
プロパティを取るReactコンポーネントを書いています。一般に、これは引数のオブジェクトを取り込み、別のReactコンポーネントを返す関数です。しかし、コンポーネントのユーザーがReactコンポーネントクラスを渡すことができるようにしたいと思います。私は、内部関数の中でそのクラスをラップします:もちろん関数がクラスであるかどうかはどのようにして知ることができますか?
class MyComponent extends React.Component {
render() {
const { renderer } = this.props;
const renderFn = (renderer.isAComponentClass())
? (props => <renderer {...props} />)
: renderer;
return <div>{ renderFn(someArgs) }</div>;
}
}
、JavaScriptで、クラスでも関数です。 renderer
がクラスであるかどうかを確認するにはどうすればよいですか?私はバベル6を使用しています。
私は簡単な返信<renderer {...someArgs} />
ができることを知っています。私はこれを避けることができれば、コンポーネントツリーを不必要に膨らませてしまうので、これをやっていません。
誰かがBabelでコンパイルしたバージョンのクラスを使用している場合はどうなりますか?それで、彼らが何であっても、その時点ではどちらも機能していません。 2つの別々のパラメータを受け入れることをお勧めします。 – loganfsmyth
どちらの場合も、それらは関数です(つまり、typeof thing === 'function'')。しかし、必ずしもそれを区別する方法がないということを意味するわけではありません。検証可能な方法がない場合は、それが答えになります。 –
'fn'がコンポーネントクラスの場合、' fn.prototype'には基本クラスのコンポーネントメソッドが含まれているはずですので、それらの存在をテストできます。単にファクトリ関数であれば、 'fn.prototype'はコンポーネントメソッドを含んでいません。 – jfriend00