web-dev-qa-db-ja.com

反応でProptypes.shapeをProptypes.arrayOfに渡す

2つのモデルStateとCityを別々のファイルに作成しました。州の都市をインポートします。

Stateはその中にCitiesの配列を持つことができます。

以下のコードは正常に動作します。

State.js

_let State = PropTypes.shape({
    name: React.PropTypes.string,
    cities: PropTypes.arrayOf(PropTypes.shape(City))
}); 
_

City.js

_let City = PropTypes.shape({
    name: React.PropTypes.string,
    population: PropTypes.number
}); 
_

ただし、citiesを次のように書き換えると

_let State = PropTypes.shape({
    name: React.PropTypes.string,
    cities: PropTypes.arrayOf(City)
}); 
_

それは私に警告を与えます。

概要

cities: PropTypes.arrayOf(PropTypes.shape(City))は機能します。

cities: PropTypes.arrayOf(City)はサポートしていません。

それは私に次の警告を与えます:

_Warning: Failed propType: Property xx of component Xx has invalid PropType notation inside arrayOf. Check the render method of Yy._

私の質問は、Cityは_Proptypes.shape_ですが、なぜ_Proptypes.arrayOf_でProptypes.shape(City)に再び言及する必要があるのですか?

15
Ankit

あなたのコードで:

let City = PropTypes.shape({
  name: React.PropTypes.string,
  population: PropTypes.number
}); 

どのバージョンのReactを使用していますか?React.PropTypesおよびPropTypesからPropTypesを参照しています。PropTypesをどのようにインポートしていますか?prop-typesパッケージを使用していますか?

私は同様のシナリオを使用していますが、それは私にとってはうまくいきます。あなたのレンダリングはどのように見え、小道具に提供されるデータは何ですか?

私にとっては、次のことが完全に機能します:

cities: PropTypes.arrayOf(City)
5
Ken Gregory

私は同じ問題を抱えていますが、私の場合、1つのファイルが他のファイルの前にロードされたことが原因でした。

あなたの場合、City.jsをロードするときにState.jsがまだロードされていないことが原因である可能性があります

0
Sven G