2016-12-30 3 views
4

私は特定のリアクションクラスのインスタンスを4つ持っています。 componentDidMount()の後、私は各インスタンスのy位置を保存します。componentDidMount()内のReactJS要素を取得する方法は?

どのようにレンダリングされた要素に対処できますか?私は異なるクラスの同じクラスの4つの要素を持っているので、classnameを使うことはできません。

マイReactJSコンポーネント:

const Col = React.createClass({ 
    componentDidMount: function() { 
     //here address the actual rendered col-instance 
    }, 

    render() { 
     return (
      <div className='col'> 
      </div> 
     ); 
    } 
}); 
+0

質問をもっと理解しようとしています。後で使うために各Reactコンポーネントインスタンスのy位置を保存しようとしていますか?また、マウント後にこれらの要素のそれぞれのy位置が変化しますか? – HussienK

+0

私はそれを保存する必要があります、それは変更されません。多分私はthis.refを使うことができますか? – vuvu

+1

達成しようとしていることをもう少し説明できますか?どこに何を保存したいですか?どのようにして保存された値にアクセスしたいのですか? –

答えて

5

使用refs

まず、各JSX cols要素にref属性を接続します。次に、このrefcomponentDidMountメソッドの内部で使用して、コンポーネントのDOMノード(実際のHTMLElement)にアクセスします。最後に、要素の位置/オフセットまたは必要なものを取得します。

const Col = React.createClass({ 
    componentDidMount: function() { 
     // this.refs.col1 is the actual DOM element, 
     // so you can access it's position/offset or whatever 
     const offsetTop = this.refs.col1.offsetTop; 
    }, 

    render() { 
     return (
      <div className="col" ref="col1"> 
      </div> 
     ); 
    } 
}); 

PS:私はあなたが要素y位置を言って何を意味するのかわかりません。とにかく、DOM要素(this.refs.col1)を取得する方法がわかったら、必要なのはjavascript to retrieve the positionです。

+1

React.jsの古いAPIのための良い解決策でした。 https://reactjs.org/docs/refs-and-the-dom.htmlから: "文字列リファレンスにはいくつかの問題があり、レガシーと見なされ、将来のリリースのいずれかで削除される可能性が高いので、それに反対してください。 "ここに新しいAPIがあれば、解決策はhttps://stackoverflow.com/questions/42242146/react-how-to-access-the-dom-element-in-my-render-function-from-the-same-compone – favero

関連する問題