React: React.PropTypes.nodeはステートレスコンポーネント(関数)を受け入れる必要があります

作成日 2015年11月22日  ·  3コメント  ·  ソース: facebook/react

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を追加する必要がありますか? または、 nodefuncも処理しない理由はありますか?

最も参考になるコメント

これをどのように使用していたかを示していただけますか? コンポーネントクラスはnodeでも有効であるはずではなかったと思います。 nodeは、レンダリング可能なものをすべて受け入れることになっています。 クラスを直接レンダリングすることはできません。タイプが設定された要素を渡すことになります。

全てのコメント3件

新しいpropTypeバリデーターを追加するのはどうですか? 何かのようなもの

propTypes: {
    optionalComponent: React.PropTypes.component
}

コンポーネントの形式は次のとおりです。

PropTypes.oneOfType([ PropTypes.node, PropTypes.func ])

または同様のもの。 私の意見では、人々に関数を渡させるのは非常に危険ですが、より良い検証を行う方法がわかりません。 function.toString読むことは、縮小後には機能しない巨大なハックのように見えますが、これは私が知っている唯一のオプションです。

これをどのように使用していたかを示していただけますか? コンポーネントクラスはnodeでも有効であるはずではなかったと思います。 nodeは、レンダリング可能なものをすべて受け入れることになっています。 クラスを直接レンダリングすることはできません。タイプが設定された要素を渡すことになります。

何てことだ。 あなたはとても正しいです。 私は愚かだと感じます。 私は何か悪い方法を検証していたと思います。 騒音でごめんなさい。

このページは役に立ちましたか?
0 / 5 - 0 評価