React=でdivの幅と高さのスタイルにアクセスしようとしていますが、1つの問題に直面しています。これが今までに得たものです。
componentDidMount() {
console.log(this.refs.container.style);
}
render() {
return (
<div ref={"container"} className={"container"}></div> //set reff
);
}
これは機能しますが、出力されるのはCSSStyleDeclarationオブジェクトであり、allプロパティではそのオブジェクトのすべてのCSSセレクターを使用できますが、いずれも設定されていません。それらはすべて空の文字列に設定されます。
これはCSSStyleDeclerationの出力です: http://Pastebin.com/wXRPxz5p
実際のスタイル(イベント継承スタイル)を確認するためのヘルプは大歓迎です!
ありがとう!
For React v <= 15
console.log( ReactDOM.findDOMNode(this.refs.container).style); //React v > 0.14
console.log( React.findDOMNode(this.refs.container).style);//React v <= 0.13.3
編集:
特定のスタイル値を取得するため
console.log(window.getComputedStyle(ReactDOM.findDOMNode(this.refs.container)).getPropertyValue("border-radius"));// border-radius can be replaced with any other style attributes;
React v> = 16
コールバックスタイルまたはcreateRef()を使用してrefを割り当てます。
assignRef = element => {
this.container = element;
}
getStyle = () => {
const styles = this.container.style;
console.log(styles);
// for getting computed styles
const computed = window.getComputedStyle(this.container).getPropertyValue("border-radius"));// border-radius can be replaced with any other style attributes;
console.log(computed);
}
ReactDOM.findDOMNodeは現在使用可能ですが、コールバックrefの代わりに非推奨になることに注意してください。
Dan Abramovによる投稿 こちら があります。これは、ReactDOM.findDOMNodeの使用をコールバック参照に置き換える方法の例を提供しながら、findDOMNodeを使用しない理由を概説しています。
SOを見たので、回答にリンクのみが含まれているとユーザーが動揺するので、ダンが親切に提供してくれた例の1つを渡します。
**Before:**
class MyComponent extends Component {
componentDidMount() {
findDOMNode(this.refs.something).scrollIntoView();
}
render() {
return (
<div>
<div ref='something' />
</div>
)
}
}
**After:**
class MyComponent extends Component {
componentDidMount() {
this.something.scrollIntoView();
}
render() {
return (
<div>
<div ref={node => this.something = node} />
</div>
)
}
}
ReactDOM.findDOMNode
メソッドを使用して、そこから作業する必要があります。必要なことを行うコードは次のとおりです。
var Hello = React.createClass({
componentDidMount: function() {
var elem = ReactDOM.findDOMNode(this.refs.container);
console.log(elem.offsetWidth, elem.offsetHeight);
},
render: function() {
return (
<div ref={"container"} className={"container"}>
Hello world
</div>
);
}
});
ReactDOM.render(
<Hello name="World" />,
document.getElementById('container')
);
React Refsおよび.getComputedStyle
メソッドを使用してCSSプロパティ値を計算する例を次に示します。
class App extends React.Component {
constructor(props) {
super(props)
this.divRef = React.createRef()
}
componentDidMount() {
const styles = getComputedStyle(this.divRef.current)
console.log(styles.color) // rgb(0, 0, 0)
console.log(styles.width) // 976px
}
render() {
return <div ref={this.divRef}>Some Text</div>
}
}
スタイルを既に取得しています。CSSStyleDeclarationオブジェクトの小道具が空の文字列値を持っている理由は、内部スタイルへのリンクです。
以下のような変更を行った場合に何が起こるかを参照してください。
<div ref={"container"} className={"container"} style={{ width: 100 }}></div>