J'essaie d'accéder aux styles width et height d'une div dans React mais je rencontre un problème. C'est ce que j'ai eu jusqu'à présent:
componentDidMount() {
console.log(this.refs.container.style);
}
render() {
return (
<div ref={"container"} className={"container"}></div> //set reff
);
}
Cela fonctionne, mais le résultat obtenu est un objet CSSStyleDeclaration et, dans la propriété all, tous les sélecteurs CSS pour cet objet, mais aucun d’eux n’est défini. Ils sont tous définis sur une chaîne vide.
Voici le résultat de CSSStyleDecleration: http://Pastebin.com/wXRPxz5p
Toute aide pour connaître les styles actuels (ceux hérités de l'événement) serait grandement appréciée!
Merci!
Pour 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
MODIFIER:
Pour obtenir la valeur de style spécifique
console.log(window.getComputedStyle(ReactDOM.findDOMNode(this.refs.container)).getPropertyValue("border-radius"));// border-radius can be replaced with any other style attributes;
Pour React v> = 16
assignez ref en utilisant le style de rappel ou en utilisant createRef ().
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);
}
Vous devriez utiliser la méthode ReactDOM.findDOMNode
et travailler à partir de là. Voici le code qui fait ce dont vous avez besoin.
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')
);
Il est à noter que, bien que ReactDOM.findDOMNode soit utilisable aujourd'hui, il sera obsolète à l'avenir à la place des références de rappel.
Il existe un article ici de Dan Abramov qui explique les raisons pour lesquelles vous n’utilisez pas findDOMNode tout en fournissant des exemples de remplacement de l’utilisation de ReactDOM.findDOMNode par des références de rappel.
Depuis que j'ai vu SO des utilisateurs s'énerver quand seulement un lien était inclus dans une réponse, je vais donc vous donner l'un des exemples que Dan a aimablement fourni:
**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>
)
}
}
Vous avez déjà le style. La raison pour laquelle les propriétés de l'objet CSSStyleDeclaration ont une telle valeur de chaîne vide est son lien avec le style interne.
Voyez ce qui se passera si vous faites un changement comme ci-dessous:
<div ref={"container"} className={"container"} style={{ width: 100 }}></div>