如何在reactjs中使用javascript更改样式

如何在reactjs中使用javascript更改样式,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,如何在reactjs中使用javascript更改样式 class Hello extends Component{ constructor(props){ super(props); this.state = { } this.handleClick = this.handleClick.bind(this); } handleClick() { document.getElementsBy

如何在reactjs中使用javascript更改样式

class Hello extends Component{
    constructor(props){
        super(props);
        this.state = {
        }
        this.handleClick = this.handleClick.bind(this);
    }
    handleClick() {
        document.getElementsByClassName("hello").style.color = 'red';
    }
    render(){
        return (
            <div className="hello" onClick={this.handleClick}>hello</div>
        );

    }
}

ReactDOM.render(
    <Hello/>,
    document.getElementById('root')
);
类Hello扩展组件{
建造师(道具){
超级(道具);
此.state={
}
this.handleClick=this.handleClick.bind(this);
}
handleClick(){
document.getElementsByClassName(“hello”).style.color='red';
}
render(){
返回(
你好
);
}
}
ReactDOM.render(
,
document.getElementById('root'))
);
我犯了一个错误

TypeError:无法设置未定义的属性“color”

document.getElementsByClassName返回所选元素的数组。因此,

返回具有所有给定类名的所有子元素的类似数组的对象。在document对象上调用时,将搜索整个文档,包括根节点。也可以对任何元素调用GetElementsByCassName();它将只返回具有给定类名的指定根元素的后代元素。

在这种情况下,需要指定要使用的元素的索引。 通知如下[0]

document.getElementsByClassName(“hello”)[0].style.color='red'

类Hello扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
}
this.handleClick=this.handleClick.bind(this);
}
handleClick(){
document.getElementsByClassName(“hello”)[0].style.color='red';
}
render(){
返回(
你好
);
}
}
ReactDOM.render(
,
document.getElementById('root'))
);

document.getElementsByClassName返回所选元素的数组。因此,

返回具有所有给定类名的所有子元素的类似数组的对象。在document对象上调用时,将搜索整个文档,包括根节点。也可以对任何元素调用GetElementsByCassName();它将只返回具有给定类名的指定根元素的后代元素。

在这种情况下,需要指定要使用的元素的索引。 通知如下[0]

document.getElementsByClassName(“hello”)[0].style.color='red'

类Hello扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
}
this.handleClick=this.handleClick.bind(this);
}
handleClick(){
document.getElementsByClassName(“hello”)[0].style.color='red';
}
render(){
返回(
你好
);
}
}
ReactDOM.render(
,
document.getElementById('root'))
);

您也可以使用react方法

class Hello extends Component{
    constructor(props){
        super(props);
        this.state = {
            customColor: {}
        }
        this.handleClick = this.handleClick.bind(this);
    }
    handleClick() {
        this.setState(() => ({ customColor: { color: 'red' } }));
    }

    render(){
        return (
            <div className="hello" style={this.state.customColor} onClick={this.handleClick}>hello</div>
        );

    }
}

ReactDOM.render(
    <Hello/>,
    document.getElementById('root')
);
类Hello扩展组件{
建造师(道具){
超级(道具);
此.state={
自定义颜色:{}
}
this.handleClick=this.handleClick.bind(this);
}
handleClick(){
this.setState(()=>({customColor:{color:'red'}}));
}
render(){
返回(
你好
);
}
}
ReactDOM.render(
,
document.getElementById('root'))
);

这样做的好处是,任何单独或多次创建的组件都将在状态集、函数集和所有内容上都有。因此,当我点击一个组件时,它将影响同一个组件,从而使其隔离。

您可能也可以使用react方式

class Hello extends Component{
    constructor(props){
        super(props);
        this.state = {
            customColor: {}
        }
        this.handleClick = this.handleClick.bind(this);
    }
    handleClick() {
        this.setState(() => ({ customColor: { color: 'red' } }));
    }

    render(){
        return (
            <div className="hello" style={this.state.customColor} onClick={this.handleClick}>hello</div>
        );

    }
}

ReactDOM.render(
    <Hello/>,
    document.getElementById('root')
);
类Hello扩展组件{
建造师(道具){
超级(道具);
此.state={
自定义颜色:{}
}
this.handleClick=this.handleClick.bind(this);
}
handleClick(){
this.setState(()=>({customColor:{color:'red'}}));
}
render(){
返回(
你好
);
}
}
ReactDOM.render(
,
document.getElementById('root'))
);

这样做的好处是,任何单独或多次创建的组件都将在状态集、函数集和所有内容上都有。因此,当我为一个组件进行handleclick时,它将影响同一个组件,从而给它一个隔离。

如果:1)在该类中找不到任何元素,就会发生这种情况。2) 如果使用无效索引来访问数组中的元素,最好不要自己修改DOM,让React来处理它。React可以更有效地为您执行此操作。使用
样式
属性。如果:1)未找到该类的元素,则可能会发生这种情况。2) 如果使用无效索引来访问数组中的元素,最好不要自己修改DOM,让React来处理它。React可以更有效地为您执行此操作。使用
风格
道具。这很好,但我如何才能对同一类的所有元素执行此操作根据您的评论添加到答案中,微笑,我不想用于lop。我得另找一条路。说实话,这是一个不同的问题。我只是帮你解决你原来的问题。如果你原来的问题解决了,请随意接受答案,这样那些被类似问题困扰的人也可以从中受益。希望有帮助,当然。我会的。但这并没有解决我的问题。但是你是对的。这很好,但是我怎么能对同一类的所有元素这样做呢?根据你的评论,答案中添加了微笑,我不想用lop。我得另找一条路。说实话,这是一个不同的问题。我只是帮你解决你原来的问题。如果你原来的问题解决了,请随意接受答案,这样那些被类似问题困扰的人也可以从中受益。希望有帮助,当然。我会的。但这并没有解决我的问题。但你是对的。