react.jsを使用してアプリを作成し、コンポーネント(P)の子コンポーネント(C1)からオブジェクトの配列であるデータを取得し、データを別の子コンポーネント(C2)に再度渡そうとしています。ただし、到着したデータを(C2)でコンソールログに記録すると、データがあることを示すのは奇妙ですが、コンソールでそのプロパティをログに記録すると、undefinedのプロパティを読み取れないと表示されます。 コードは次のとおりです。
class ParentComponent extends Component {
constructor(props) {
super(props)
this.state = {
photos: []
}
}
myCallback = dataFromChild1 => {
this.setState({
photos: dataFromChild1
})
render(){
const { photos } = this.state;
return (
<main>
<Child1 callbackFromParent={this.myCallback} />
<Child2 photos={photos} />
</main>
)
}
class Child1 extends Component {
constructor(props) {
super(props)
}
componentDidMount() {
const photos = [{width: '100px'}, {width: '150px'}];
this.props.callbackFromParent(photos);
}
render() {
return (
<main>
...
</main>
)
}
}
function Child2(props) {
const photos = props.photos;
console.log(photos) // > [{..},{..}]
console.log(photos[0].width) // > cannot read property 'width' of undefined
return (
<main>
...
</main>
)
}
回答 3 件
Child2関数を変更してテストします。コードが役に立つことを願っています
function Child2(props) { const photos = props.photos; console.log(photos) // > [{..},{..}] if(photos.length){ console.log(photos[0].width) } return ( <main> <p>Or you can use as the following </p> <p>{photos.length? photos[0].width : '' }</p> </main> ) }
コールバック関数を親にバインドしてみてください。
ParentComponentのコンストラクターで次のように記述します。
this.myCallback = this.myCallBack.bind(this);
関連記事
- 親の状態が変更された後、Reactの子が更新されない
- Mdi親をオブジェクトとして開くと、VBNetの別のMdi子フォームからMdi子フォームを開くことができません。
- 制御されたフォームを子/親コンポーネントと反応させる
- 親要素と子要素の個別のonClickイベント
- 親から子の状態にアクセスする
- コンポーネントから別のコンポーネントに可変角度を渡す
- 警告:リスト内の各子には、一意のキーReactがある場合でも、一意の「キー」プロップが必要です。
- React Jsのリンクを使用して、オブジェクトをあるページから別のページに渡します
- 別の条件付き反応の中で条件付きを使用する
- Reactを使用して別のユーザーが選択されたときにリストからユーザーの選択を解除するにはどうすればよいですか?
関連した質問
- Javascriptajax配列の値だけを表示する方法
- Typescript Reactコンポーネント:TS警告を停止するためにreduxpropタイプを実行する正しい方法
- React-Redux:インポート試行エラー: '/ components/Score'にデフォルトのエクスポートが含まれていません( 'Score'としてインポートされました)
- divターゲットにアクセスして、reactでリストグループアイテムのスタイルを切り替える方法は?
- React Nativeエラー失敗したプロップタイプ:タイプ `array`の無効なプロップ` children`が `Overlay`に提供されました。
- svg要素の幅と高さを制御する方法
- 別のページにあるボタンの値を呼び出すにはどうすればよいですか?
- jsonから特定のコンテンツをレンダリングする
- JavaScriptを使用したスライドショーを使用したReactJSの画像モーダル
- Reactjs無限スクロールコンポーネントは常に新しいデータをレンダリングします
このフィドルはあなたが探しているものです。
コードは次のとおりです。
setStateは非同期であるため、最初のレンダリングではデータ配列は空です。