Comment puis-je utiliser React.DOM pour changer les styles sur HTML body
?
J'ai essayé ce code et ça ne marche pas:
var MyView = React.createClass({
render: function() {
return (
<div>
React.DOM.body.style.backgroundColor = "green";
Stuff goes here.
</div>
);
}
});
Si vous l'exécutez à partir de la console des navigateurs, cela fonctionne (mais j'ai besoin qu'il fonctionne en code ReactJS): document.body.style.backgroundColor = "green";
Voir également cette question pour une solution similaire mais différente: Changer la couleur d'arrière-plan de la page avec chaque route en utilisant ReactJS et React Router?
En supposant que votre balise body ne fait pas partie d'un autre composant React, modifiez-le comme d'habitude:
document.body.style.backgroundColor = "green";
//elsewhere..
return (
<div>
Stuff goes here.
</div>
);
Il est recommandé de le mettre à la méthode componentWillMount
et de l'annuler à componentWillUnmount
:
componentWillMount: function(){
document.body.style.backgroundColor = "green";
}
componentWillUnmount: function(){
document.body.style.backgroundColor = null;
}
Une bonne solution pour charger plusieurs attributs d'une classe js dans le corps du document peut être:
componentWillMount: function(){
for(i in styles.body){
document.body.style[i] = styles.body[i];
}
},
componentWillUnmount: function(){
for(i in styles.body){
document.body.style[i] = null;
}
},
Et après avoir écrit votre style de corps aussi longtemps que vous le souhaitez:
var styles = {
body: {
fontFamily: 'roboto',
fontSize: 13,
lineHeight: 1.4,
color: '#5e5e5e',
backgroundColor: '#edecec',
overflow: 'auto'
}
}
La meilleure façon de charger ou d'ajouter des classes supplémentaires est d'ajouter le code dans componentDidMount ().
Testé avec réagit et météore :
componentDidMount() {
var orig = document.body.className;
console.log(orig); //Just in-case to check if your code is working or not
document.body.className = orig + (orig ? ' ' : '') + 'gray-bg'; //Here gray-by is the bg color which I have set
}
componentWillUnmount() {
document.body.className = orig ;
}