【发布时间】:2019-07-06 15:36:34
【问题描述】:
我是 React 的新手,我不明白为什么我的显示没有改变(切换)。 我有三个按钮,应该在屏幕上显示> 800px。 在 。通过单击活动按钮,它也应该显示其他两个按钮...... 第一次确实会从 inlineBlock 切换到无,但之后它对操作没有反应......
import React, {Component} from 'react';
class Tags extends Component {
constructor(props) {
super(props);
this.state = {
smallScreen: window.innerWidth < 800,
tags: [
{"id": 1, "title": "World Of Tanks"},
{"id": 2, "title": "World Of Warplanes"},
{"id": 3, "title": "World Of Warship"},
],
activeTags: {"id": 2, "title": "World Of Warplanes"},
displayingA: "inlineBlock",
displayingB: "none",
}
}
onClickBtn = (tag) => {
console.log(this.state.displayingA);
console.log(this.state.displayingB);
console.log(this.state.activeTags);
if (this.state.smallScreen) {
if (tag.id === this.state.activeTags.id) {
this.getStyles();
console.log("change show/hide style");
} else {
this.getStyles();
this.setState({activeTags: tag});
console.log("make this btn active");
}
} else {
this.setState({activeTags: tag});
console.log("make this btn active big screen");
}
};
getStyles = () => {
if (this.state.displayingB === "none") {
console.log("change show");
this.setState({displayingB: "inlineBlock"})
} else {
console.log("change hide");
this.setState({displayingB: "none"})
}
};
activeTag = (title) => "-> " + title;
render() {
const {tags, activeTags, smallScreen, displayingA, displayingB} = this.state;
// 1300 px
const listItem = tags.map((tag) => (
<button
style={tag.title !== activeTags.title && smallScreen ? {display: displayingB} : {display: displayingA}}
className={tag.title === activeTags.title && !smallScreen ? "activeTag" : "btn"}
key={tag.id}
onClick={this.onClickBtn.bind(this, tag)}>
{tag.title === activeTags.title && smallScreen ? this.activeTag(tag.title) : tag.title}
</button>
));
return (
<>
<div className="tagsSection">
{listItem}
</div>
<div className="gridTags">
{listItem}
</div>
</>
);
}
}
export default Tags;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.1.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.1.1/umd/react-dom.production.min.js"></script>
谢谢!
【问题讨论】:
标签: javascript reactjs styles toggle state