2017-08-10 6 views
0

要素のインスタンスを作成して、コード内の関数を呼び出せるようにする必要がありますか?たとえば、theGridがタイプGridの場合、両方ともページに配置したいが、それをローカル変数として保存して、後でtheGrid.forceUpdate()と言うこともできます。要素をページに配置するだけでなく、要素を作成する方法

下記のコードはGridを表示していません。しかし、が(もちろんパラメータを使用して)<Grid...>に置き換えられた場合は、ページに表示されますが、私のコードでは参照できなくなります。

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import { Grid } from 'react-virtualized'; 
import ReactInterval from 'react-interval'; 

// Grid data as an array of arrays 
const quoteList = [ 
    ['GE', 100, 35.28, 35.30, 100, 95125], 
    ['IBM', 100, 135.11, 135.20, 100, 195125], 
    ['C', 100, 45.23, 45.30, 100, 195125] 
]; 

const App = React.createClass({ 
    getInitialState() { 
    return { 
     enabled: false, 
     timeout: 1000, 
     count: 0 
    }; 
    }, 

    cellRenderer ({ columnIndex, key, rowIndex, style }) { 
    return (
     <div 
     key={key} 
     style={style} 
     > 
     {quoteList[rowIndex][columnIndex]} 
     </div> 
    ) 
    }, 

    render() { 
    const {timeout, enabled, count} = this.state; 
    var theGrid = React.createElement(Grid, { 
      cellRenderer:this.cellRenderer, 
      columnCount:quoteList[0].length, 
      columnWidth:50, 
      height:quoteList.length * 20, 
      rowCount:quoteList.length, 
      isVisible : true, 
      rowHeight:20, 
      width:800}, null); 

    return (
     <div> 
     <ReactInterval {...{timeout, enabled}} 
      callback={ 
      () => { 
       this.setState({count: this.state.count + 1}) 
       quoteList[0][1] = this.state.count 
       console.log(quoteList[0][1]) 
      } 
      } 
     /> 

     <input type="number" step="200" min="200" max="5000" value={this.state.timeout} 
      onChange={({target: {value}}) => this.setState({timeout: parseInt(value, 10)})} />&nbsp; 

     <button disabled={enabled} onClick={() => this.setState({enabled: true})}> 
      Start</button>&nbsp; 

     <button disabled={!enabled} onClick={() => this.setState({enabled: false})}> 
      Stop</button>&nbsp; 

     {count} 

     <div> 
      &nbsp; 
     </div> 

     <theGrid/> 
     </div> 
    ); 
    } 
}); 

const appRoot = document.createElement('div'); 
document.body.appendChild(appRoot); 
ReactDOM.render(<App />, appRoot); 
+0

"theGridは型グリッドのです" - どういう意味ですか?また、あなたはアプリ内や他の場所からそれを使って作業しようとしていますか? – jmargolisvt

+0

グリッドには、forceUpdateなどの関数を呼び出すことができます。クリックすると、ボタンのクリックメソッドのコールバック関数からGrid.forceUpdate()を呼び出したいというボタンが画面に表示されているとはどうですか? – Ivan

+0

今のところ私はApp内から呼び出すだけです。 – Ivan

答えて

2

refを使用してみましたか?

は、あなたのGridにこの小道具を追加します。

ref={(ref) => this.theGrid = ref} 

今、あなたはthis.theGrid経由でグリッドを参照することができるはずです。

反応し、仮想同様の問題に対処するの著者:

https://github.com/bvaughn/react-virtualized/issues/383レフリーに

より:

https://facebook.github.io/react/docs/refs-and-the-dom.html

https://zhenyong.github.io/react/docs/more-about-refs.html

+0

問題は、を使用すると、グリッドが表示されないということです。 を渡すと、それが実行されます。だから私は変数を持っているのでアクセスすることができますが、それは表示されません、または私はそれを表示することができますが、私はそれにアクセスすることはできません。 – Ivan

+0

多分私はあなたの答えを誤解しています。コードのより完全なセクションが役立つかもしれません。 – Ivan

+0

それは動作します!!!!!!!!!!!!ありがとう。 – Ivan

関連する問題