javascript - 如何更改类名?
问题描述
所以我将 div 元素保持在我的状态。我想改变它className
以响应onClick
事件。我知道我可以这样做,event.target.className
但下面的代码只是一个最大应用程序的示例,不可能在那里使用它。作为changeClass
函数的结果,我得到
“TypeError:无法分配给对象'#'的只读属性'className'”。
所以我想知道有没有其他方法可以做到这一点?
import React, { Component } from "react";
import "./styles/style.css";
class App extends Component {
constructor(props) {
super(props);
this.state = {
myDiv: [
<div
id="firstDiv"
key={1}
className={"first"}
onClick={this.changeClass}
/>
]
};
}
changeClass = () => {
this.setState(prevState => {
return { myDiv: (prevState.myDiv[0].props.className = "second") };
});
};
render() {
return <div>{this.state.myDiv.map(div => div)}</div>;
}
}
export default App;
解决方案
不要将您的 jsx 置于状态。只添加 className 和 state 和 onChangeClass 使用 this.stateState 来更新 className。
import React, { Component } from "react";
import "./styles/style.css";
class App extends Component {
constructor(props) {
super(props);
this.state = {
className:"first"
};
}
changeClass = () => {
this.setState({ classNmae: "two" });
};
render() {
return <div>
<div
id="firstDiv"
className={this.state.className}
onClick={this.changeClass}
/>
</div>;
}
}
export default App;
推荐阅读
- python - 保存图形时 Matplotlib 未正确显示直方图
- c# - 写入位置访问冲突,线程之间共享变量
- arangodb - ArangoDB AQL:查找顺序数据中的差距
- azure - Azure Monitor 是否将警报发布到 RSS 源或消息队列或主题?我们可以创建一个订阅模型来自己接收警报吗?
- flutter - 在 Flutter 中点击图标时如何打印出图标名称
- tcl - Eggdrop 上带有 API 的 Youtube 脚本未显示正确的字符集
- amazon-s3 - Redshift External Table 所有字段为空
- c - 我不知道如何编写关于金字塔的 C 代码
- apache-kafka - 如何重命名/替换 Kafka-connect SMT 结构中的字段?
- python - 将另一列添加到现有列表