2017-10-04 7 views
0

Reactでブログプロジェクトを作成しました。オブジェクト(記事)の配列はコンポーネント1からロードされます。コンポーネント1の記事タイトルをクリックし、コンポーネント2(記事全体)に進むとすべてが表示されます。もし私がリフレッシュすると、コンポーネント2とコンポーネント1だけがレンダリングされるので、TypeErrorを取得します:未定義のプロパティ 'title'を読み取ることができません。コンポーネント2をリフレッシュすると、コンポーネント1を強制的にレンダリングします

コンポーネント1に戻ると、すべてがレンダリングされ、コンポーネント2に再度アクセスできます。ルータのDOMを使用します。

コンポーネント2をリフレッシュすると、コンポーネント1を強制的にレンダリングできますか?ここで

は私のコンポーネント2:

render(){ 
    return (

     <div className="SinglePageContainer"> 
      <div className="SinglePageTitle">{this.props.currentObject.title}</div> 
      <div className="SinglePageDate"><FontAwesome name="clock-o"/> {this.props.currentObject.date}</div> 
      <div className="SinglePageArticle">{this.props.currentObject.text}</div> 
     </div> 
    ); 
} 

}

+0

あなたは物事をどのように構成しているのかは間違いでしょう。子のレンダリング時に親コンポーネントを再レンダリングする必要はありません。または、更新されたページには、レンダリングするコンポーネントの完全なセットがありません。 –

答えて

0

ルーターを使用していて、とてもComponent1のルート(ArticlesList)とComponent2ための別のルート(Article)を持っているように思え問題は、ArticleListをもう一度レンダリングする必要があるとは限りません。 Articleのデータを取得する作業は、最初のルートからのナビゲーションを開始するときに行いますが、2番目のルートを別のページとしても動作させたい場合はArticleコンポーネントが独自のデータを取得する必要があります。

fetchArticleプロパティをComponent2に渡すことをお勧めします。これは、レンダリングしようとした時点でデータがロードされていない場合に使用できます。また、その記事のデータを受け取るまで、記事のコンテンツをレンダリングしないようにします。

class Article extends React.Component { 
    componentDidMount() { 
    const { articleId, articleData, fetchArticle } = this.props; 
    if (!articleData) { 
     fetchArticle(articleId); 
    } 
    } 

    render() { 
    const { articleData } = this.props; 
    if (!articleData) { 
     return (<div>Loading</div>); 
    } 

    return (
     <div> 
     {articleData.content} 
     </div> 
    ); 
    } 
} 
+0

これはライフサイクル・メソッドですか?残念ながら、私はまだこれを研究していませんでした、そして、私はそれらを使う方法を知らない。 – Ics

+0

@icsあなたが投稿した質問の解釈に基づいて回答しましたが、Component1がどこに届いているかについてより多くの文脈を提供できれば、そのデータはより良いものになります。私はあなたが[反応のドキュメント](https://reactjs.org/docs/hello-world.html)を通して、コンポーネントの仕組みに関するより多くのコンテキストを知ることをお勧めします。 – jenriquer

+0

上記のように、私のコンポーネント2では、オブジェクトの配列から現​​在のオブジェクトを小道具として取ります:this.props.currentObjectと私はこのオブジェクトからthis.props.currentObject.title、dateとtextだけを使用します。アプリのようなブログですか? Comp。 2はメインページの記事タイトルをクリックするとレンダリングされます。タイトルをクリックすると、記事全体で新しいページが開きます。 構造: メイン - >記事(ここではマップ機能がある) - (マップによってmultiplyed)>記事 メイン - > SinglePageArticle(私の上記の構成要素) 条に私をクリックすることで、レンダリング、SinglePageArticleに私をリンクされてルートパスのメイン。 – Ics

関連する問題