2016-06-17 4 views
0

ローダーとカレンダーという2つのコンポーネントがあります。カレンダーがデータをフェッチするまで、loaderコンポーネントが表示され、データが取得されるたびにカレンダーcomponentがレンダリングされます。私はReduxを使ってアプリケーションの状態を管理しています。カレンダーには独自の状態があり、いくつかの変更があったらそれを維持したいので、カレンダーを解除してDOMに残さないようにしてください。したがって、現在のコンポーネントのビューが変わるたびに、ローダーが来て、カレンダーをアンマウントする代わりに非表示にする必要があります。これどうやってするの?反応でコンポーネントのマウントを解除する方法を教えてください。

現在、私が書いた:私はReduxのを使用してAPIフックからデータをフェッチしています時に

render() { 
    let that = this, 
     { loading } = that.props; 

    return loading ? that.renderLoader() : that.renderCalendar(); 
    } 

カレンダーは、そののonChangeがあります

私はコンポーネントの再場合は、カレンダーのアンマウントを防ぐことができますどのように
onChange = (params) => { 
     //API Hooks 
} 

レンダリングする。前もって感謝します。

+0

reduxを使用している場合は、カレンダーの状態をreduxに保存してください。そうすることで、マウントが解除されるか再マウントされるかは関係ありません。 – josephnvu

+0

exprerience、別の方法で解決する必要があります問題へのあなたの答えが必要です。 reduxを使用してコンポーネントの状態を調整します。 –

答えて

0
return loading ? that.renderLoader() : that.renderCalendar(); 

このようにして、コンポーネントをアンマウントすることはできません。唯一の方法は、コンポーネントを常に他のコンポーネントの上部に表示させてから、jQuery関数で表示または非表示にすることです。このカレンダーを還元会社reducerにリンクすると、カレンダーの状態が表示されたときに必要に変更されます。

1

あなたがしたいことが隠れている場合、文字通りCSSを使用して隠すのはなぜですか?

render() { 
    ... 
    return (
    <div> 
     <div style={{display: loading ? 'inline' : 'none'}}> 
     {that.renderLoader() 
     </div> 
     {!loading ? that.renderCalendar() : null} 
    </div> 
); 
} 
+1

つまり、RENDER IT_にするかどうかではなく、要素をVISIBLEにするかどうかを_decideします。これが行く方法です。この短い例のようにインラインスタイルを使う代わりに、CSSクラスを適用することをお勧めします。 'classnames'モジュールを見てください – slezica

関連する問題