es6クラスを使用して定義されたいくつかのreactコンポーネントを置き換えたところ、reactNodeではないreactステートレスコンポーネント(単なる機能)に関する警告が表示されます。
Warning: Failed propType: Invalid prop `Loader` supplied to `Picture`, expected a ReactNode.
React.PropTypes.node
を使用して一部のコンポーネントを検証していましたが、今度はPropTypes.oneOfType([ PropTypes.node, PropTypes.func ])
を使用する必要があります。これは、「これはコンポーネントとしてレンダリングできるものであれば何でもかまいません」と言うには少し長いようです(これがProTypes.node
は正しくカバーすることになっていますか?)
ドキュメントから
// Anything that can be rendered: numbers, strings, elements or an array
// (or fragment) containing these types.
optionalNode: React.PropTypes.node,
たぶんfunc
を追加する必要がありますか? または、 node
がfunc
も処理しない理由はありますか?
新しいpropTypeバリデーターを追加するのはどうですか? 何かのようなもの
propTypes: {
optionalComponent: React.PropTypes.component
}
コンポーネントの形式は次のとおりです。
PropTypes.oneOfType([ PropTypes.node, PropTypes.func ])
または同様のもの。 私の意見では、人々に関数を渡させるのは非常に危険ですが、より良い検証を行う方法がわかりません。 function.toString
読むことは、縮小後には機能しない巨大なハックのように見えますが、これは私が知っている唯一のオプションです。
これをどのように使用していたかを示していただけますか? コンポーネントクラスはnode
でも有効であるはずではなかったと思います。 node
は、レンダリング可能なものをすべて受け入れることになっています。 クラスを直接レンダリングすることはできません。タイプが設定された要素を渡すことになります。
何てことだ。 あなたはとても正しいです。 私は愚かだと感じます。 私は何か悪い方法を検証していたと思います。 騒音でごめんなさい。
最も参考になるコメント
これをどのように使用していたかを示していただけますか? コンポーネントクラスは
node
でも有効であるはずではなかったと思います。node
は、レンダリング可能なものをすべて受け入れることになっています。 クラスを直接レンダリングすることはできません。タイプが設定された要素を渡すことになります。