2016-07-05 14 views
1

react-grid-layoutreact-custom-scrollbarsを使用してパネルのグリッドを作成しています。React-Grid-Layout:サイズ変更時にアイテムを再レンダリングする方法

class GridLayoutWithScrollableItems extends React.Component { 

    onResize() { 
     this.setState({forceRenderAfterResize: Date.now()}) 
    } 

    render() { 
     return (
      <ReactGridLayout width={900} onResize={this.onResize.bind(this)}> 
       <div key="a"> 
        <Scrollbars> 
         <p>Lorem ipsum dolor ....</p> 
        </Scrollbars> 
       </div> 
       <div key="b"> 
        <Scrollbars> 
         <p>Aenean purus magna ...</p> 
        </Scrollbars> 
       </div> 
      </ReactGridLayout> 
     ) 
    } 
} 

ワークスリサイズ以外期待通り::それは私がforceRenderAfterResizeダミー状態変数ということを設定しています理由である再レンダリングする場合Scrollbarsだけそのバーを更新するここでは、コードの簡体版です。

これを達成するにはどうすればよいでしょうか?上記のソリューションはちょっと不思議で、サイズ変更されたアイテムだけでなくすべてのアイテムを再レンダリングします。

答えて

0

あなたのonResizeメソッドでforceUpdate()を呼び出します。ある人は、反応文書を正しく読まなかったか、forcingUpdateよりも設定状態が優先されていると主張しているかもしれませんが、その状態が実際の状態である場合にのみ、setComponentUpdateロジックが実装されていれば再描画を保証しません。 UIを介して行わUIの変更の上にあなたの状態を濁っする理由、あなたは特にブラウザがサイズ変更を決定した場合に再レンダリングしたい:

onResize() { 
    this.forceUpdate(); 
} 
+0

おかげCH、それはダミー変数を導入するよりも、確かに明確ではありません。私はまだ反応格子レイアウトの[GridItem](https://github.com/STRML/react-grid-layout/blob/master/lib/GridItem.jsx)が何らかの形で、カスタムスクロールバーの[スクロールバー](https://github.com/malte-wessel/react-custom-scrollbars/blob/master/src/Scrollbars/index.js)コンポーネント。サイズ変更は、グリッドのパネルの1つの内容にのみ影響しますので、すべてをレンダリングする必要はありません。つまり、これは私のところでは時期尚早の最適化である可能性があります。 – peterwimsey

関連する問題