2017-06-14 18 views
0

私はreact-reduxを使用してチャットアプリケーションを構築しています。このチャットアプリケーションは、一度に複数のやりとりを行い、ユーザーはそれらを切り替えることができます。反応アプリ内で、どのようにして要素(div)を動的に作成し、その中に反応アプリをレンダリングできますか?

class Chat extends React.Component { 
render() { 
    return(
     //children components 
    ) 

    } 
} 
ReactDom.render(<Chat/>,document.getElementById('app')) 

私はアンケートフォームコンポーネントをアプリケーションの子コンポーネントとして持っています。 surveyフォームがiframe内にロードされ、フォームの内容がサーバーからロードされます。これらの内容は、さまざまな対話によって異なります。したがって、新しいインタラクションがユーザーに提供されるたびに、調査フォームコンポーネントを新しいフォームデータ(この場合はインタラクションごとに1つのiframeリスト)ですべて再描画します。

問題は、毎回最初のフォームの内容をレンダリングすることです。最初のフォームを埋めたとし、新しいインタラクションが起きたとき(状態変更:リストで再レンダリングする)、2つのフォームが初期サーバーから受信したコンテンツは、私が埋め込んだデータを失うことになります。

質問:この内容をどのように保持できますか?

解決策は、現在のフォームのコンテンツをredux-storeに格納し、キーをインタラクションとして使用し、iframeがアンロードされたときにそのインタラクションをレンダリングすることです。

新しいdivや要素を動的に(新しいインタラクションで)作成し、もう一度他のコンポーネントが再レンダリングされないようにsurveyformcomponent(単一のiframeを含む)をレンダリングすることができますか?したがって、以前にレンダリングされたiframeに影響を与えることなく、div内に新しいiframeがレンダリングされるようになります。

ありがとうございます!

答えて

0

親クラスのcomponentDidMountライフサイクルメソッドの中で、おそらく別のReactDOMレンダリングコールを実行します。ライフサイクルメソッドshouldComponentUpdateを使用して、再レンダリングをより詳細に制御することもできます。

shouldCompnentUpdate(nextProps, nextState) { 
    if (/*something changed and you need to rerender explicitly*/) { 
    return true; 
    } else { 
    return false; 
    } 
} 
+0

ありがとう@Stephen L !!私が正しく理解していれば、 内部SurveyComponentクラスuは、新しいIDを作成することによってshouldCompnentUpdateの内部にSurveyComponentを再びレンダリングします。 (/ *何かが変更され、あなたが明示的に再描画する必要があります* /){ のdocument.createElement( 'div要素は')// APP_1のようないくつかのユニークなIDを割り当てた場合 //は醜い ' shouldCompnentUpdate(nextProps、nextState){ に見えます。 ReactDom.render(、newlyCreatedDivId) } falseを返します。 //常にfalseを返す } ' このケースではComponentDidMountの使用を理解できませんでした。 – iamshravan

関連する問題