2017-02-03 9 views
1

ReactJSコンポーネントに関する質問があります。私はReactJSの新機能なので、私と一緒にご負担ください。私はReactJSでこれをどうやって行うのか考え出している。ここにシナリオがあります。ReactJS 2つの異なるコンポーネント

SCENARIO:

<div> 
    <button id="download-button">Download as CSV</button> <!-- This is a ReactJS Component --> 
    <h3>Filters</h3> 
    <form> 
     <!-- 
      SOME FILTER FIELDS 
     --> 
     <input type="submit" value="Filter" /> 
    </form> 
</div> 

<div> 
    <h2>Filtered Search Result</h3> 
    <div id="result" filters="<?php echo $filters ?>"></div> <!-- This is a ReactJS Component --> 
</div> 

問題:

結果コンポーネント内の空の結果があります場合は、私は、ダウンロードボタンを非表示にします。ダウンロードボタンが結果コンポーネントの中にある場合、これは簡単だと私は理解しています。しかし、この場合、結果コンポーネントの中で無関係なhtml要素をすべて書き込んで、それらのhtml要素の上にある結果ボタンにアクセスできるようにしたいだけです。あなたのコンポーネントがrender()方法

nullを返すことができreact

+0

どのようにレンダリングされているリーチresult小道具を渡しているので? ReactDOM.renderへの2つの異なる呼び出しを使用していますか? – Pineda

+0

はい、2つの異なる呼び出しを使用してレンダリングしています。これはどのように見えますか: src/components/download-button.js 'import * as" react "からの反応 export class DownloadButton React。 エクスポートクラスのSearchResultはReact.Component { を拡張し、 "反応" と反応する成分 ' SRC /コンポーネント/検索result.js 'インポート* { は(){ リターン(

) } レンダリング}答えのための ' –

答えて

0

だから、これは有効な

// @flow 
import React from "react"; 
Props = { 
    renderNull: boolean 
} 
const MyNullDecoratorComponent = (props: Props) => props.renderNull && null || "some text"; 
+0

おかげで(){ リターン(

{this.displayResult()}
) }} レンダリング、あなたはあなたが投稿したコードを使用する方法について、より具体的なことができますか?実際には、結果コンポーネント内の関数に、ダウンロードボタンコンポーネントが隠されていると考えています。 –

+0

更新例。 – locropulenton

0

であるあなたは、この方法checkResultLengthとthis.state.downloadVisibleを持つ(1つの親コンポーネントに両方の子コンポーネントを置くことができます=真)。

この2つをresultコンポーネントのpropsとして渡します。 「componentDidMount」であなたの結果コンポーネントで

チェックとcheckResultLengthがあなたのresults.lengthの=== 0

this.state場合はfalse state.downloadVisible =を設定します親コンポーネントから渡された関数を呼び出します。 downloadVisibleは、フィルタフォームコンポーネントの小道具として渡され、それに応じて非表示にすることができます。

+0

はい、私もそれを考えました。しかし、このシナリオでは、ビューを使ってレイアウトを使用しているため、ダウンロードボタンが別のファイルに配置されているため、1つのコンポーネントの下に配置することはできません。 –

0

まず、2つのコンポーネント間の通信方法を理解する必要があります。この2つのコンポーネントがparent < - > childの場合、それらはPropsまたは関数コールバックによって通信できます。

あなたのコンポーネントは親の関係ではありませんので、最良の方法はフラックスデータフローです。フィルタ結果をグローバルコンポーネント状態として扱うことができます。

Redux、Alt.jsなどのFluxデータフローを学ぶ必要があると思いますが、問題を解決できます。

私はAlt.jsを使用しています。ここにデモがあります。

0

あなたはDOMへのコンポーネントのResultあなただけの簡単DownloadBtnコンポーネントにガード演算子を追加することができます

class Result extends Component { 
 
    render() { 
 
    const { result } = this.props // is the same with const result = this.props.result 
 
    
 
    return (
 
     <div> 
 
     {result.length >= 0 && 
 
      <DownloadBtn /> 
 
     } 
 
     { // render results here } 
 
     </div> 
 
    ) 
 
    } 
 
}

関連する問題