基于状态显示/隐藏React组件

klr1opcd  于 2022-10-22  发布在  React
关注(0)|答案(3)|浏览(194)

我是React的新手,我正在尝试创建一个页面,点击颜色方块将显示该颜色的十六进制代码。我尝试了很多不同的方法,但我不知道我的问题是在事件处理中,还是在状态处理中,或者是在其他方面。我可以将十六进制代码设置为存在或不存在,但单击时不能更改。
以下是我的主要内容:

  1. <main>
  2. <h1>Dynamic Hex Code Display</h1>
  3. <div id="container"></div>
  4. <script type="text/babel">
  5. class ColorSquare extends React.Component {
  6. render() {
  7. var blockStyle = {
  8. height: 150,
  9. backgroundColor: this.props.color,
  10. };
  11. return <div style={blockStyle} onClick = {this.props.onClick}></div>;
  12. }
  13. }
  14. class HexDisplay extends React.Component {
  15. render() {
  16. var hexText = {
  17. fontFamily: "arial",
  18. fontWeight: "bold",
  19. padding: 15,
  20. margin: 0,
  21. textAlign: "center",
  22. };
  23. var hexTextVis = {
  24. ...hexText,
  25. visibility: "visible"
  26. }
  27. var hexTextInvis = {
  28. ...hexText,
  29. visibility: "hidden"
  30. }
  31. var isVisible = this.props.isVisible;
  32. if (isVisible) {
  33. return <p style={hexTextVis}>{this.props.color}</p>;
  34. } else {
  35. return <p style={hexTextInvis}>{this.props.color}</p>;
  36. }
  37. }
  38. }
  39. class HexParent extends React.Component {
  40. constructor(props) {
  41. super(props);
  42. this.state = {
  43. isVisible: false
  44. };
  45. this.handleClick = this.handleClick.bind(this);
  46. }
  47. handleClick(e) {
  48. this.setState(currentVis => ({isVisible: !currentVis.isVisible}));
  49. console.log(this.state);
  50. console.log('clicking');
  51. }
  52. render() {
  53. var fullBoxStyle = {
  54. padding: 0,
  55. margin: 10,
  56. backgroundColor: "#fff",
  57. boxShadow: "3px 3px 5px #808080",
  58. boxRadius: "5px 5px",
  59. height: 200,
  60. width: 150,
  61. };
  62. var buttonStyle = {
  63. width:150,
  64. backgroundColor: this.props.color
  65. }
  66. return (
  67. <div style={fullBoxStyle}>
  68. <span onClick={(e) => this.handleClick()}>
  69. <ColorSquare color={this.props.color} />
  70. <span style={{
  71. isVisible: this.state.isVisible ? "true" : "false",
  72. }}>
  73. <HexDisplay color={this.props.color} />
  74. </span>
  75. </span>
  76. </div>
  77. );
  78. }
  79. }
  80. ReactDOM.render(
  81. <div class="colorRow">
  82. <HexParent color="#ba2c9d" />
  83. <HexParent color="#2cba90" />
  84. <HexParent color="#2c9dba" />
  85. </div>,
  86. document.querySelector("#container")
  87. );
  88. </script>
kse8i1jr

kse8i1jr1#

创建对象时,它是hexTextVis对象。单击时,isVisible会更改,但它仍然是hexTextVis对象,因此渲染不会更改。你可以这样做:
<HexDisplay visibility={state.isVisible}/>

{state.isVisible ? <div/> : <HexDisplay />}

liwlm1x9

liwlm1x92#

  1. style={{
  2. isVisible: this.state.isVisible ? "true" : "false",
  3. }}

没有具有此名称的css属性。也许你想用visibility

  1. style={{
  2. visibility: this.state.isVisible ? "visible" : "hidden"
  3. }}
h7wcgrx3

h7wcgrx33#

根据isVisible的条件是否等于true,尝试 Package span并使用三元运算符来呈现span元素,否则不应返回任何内容
{this.state.isVisible && <span><HexDisplay /></span>}

相关问题