css 尝试制作井字游戏应用程序时,为什么我的组件不能按预期工作?

mwg9r5ms  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(120)

关于reactjs的快速问题所以我是新的React,我试图使井字游戏的应用程序。
目前,这是我所拥有的:App.js:

  1. import logo from './logo.svg';
  2. import './App.css';
  3. import { Row } from './components/Row';
  4. import {Board} from './components/Board'
  5. function App() {
  6. // App renders Row
  7. return (
  8. <div>
  9. <Board />
  10. </div>
  11. );
  12. }
  13. export default App;

Board.js

  1. import React from "react";
  2. import { ReactDOM } from "react";
  3. import { Row } from "./Row";
  4. export function Board() {
  5. return (
  6. <div className="Board">
  7. <Row />
  8. <Row />
  9. <Row />
  10. </div>
  11. )
  12. }

Row.js

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import { Square } from './Square';
  4. export function Row() {
  5. return(
  6. <div className='Row'>
  7. <Square />
  8. <Square />
  9. <Square />
  10. </div>
  11. )
  12. }

Square.js

  1. import React, {useState} from 'react';
  2. import ReactDOM from 'react-dom';
  3. export function Square(props){
  4. // Square is rendered by App
  5. const [currLetter, changeLetter] = useState(" ");
  6. function toggleLetter(str) {
  7. if(str === " ") {return "X";}
  8. else if(str === "X") {return "O";}
  9. else if(str === "O") {return "X";}
  10. }
  11. return(
  12. <div >
  13. <button onClick={() => changeLetter(toggleLetter)} className='Square'> {currLetter} </button>
  14. </div>
  15. );
  16. }

它运行得很好,但我想知道为什么当我这样写Square.js时它不起作用:

  1. export function Square(props){
  2. // Square is rendered by App
  3. const [currLetter, changeLetter] = useState("X");
  4. function toggleLetter(str) {
  5. if(str === "X") {changeLetter("O");}
  6. else if(str === "O") {changeLetter("X");}
  7. }
  8. return(
  9. <div >
  10. <button onClick={toggleLetter} className='Square'> {currLetter} </button>
  11. </div>
  12. );
  13. }

为什么onClick不能直接接收toggleLetter呢?这是一个函数,对吗?

第二个问题这是我的CSS看起来像:

  1. .Board {
  2. display: flex;
  3. flex-direction: column;
  4. justify-content: space-between;
  5. /* width: 55%;
  6. height: 55%; */
  7. margin-top: 18%;
  8. }
  9. .Row {
  10. text-align: center;
  11. /* position: absolute; */
  12. /* left: 35%;
  13. right: 50%;
  14. top: 25%;
  15. width: 25%;
  16. height: 25%; */
  17. display: flex;
  18. flex-direction: row;
  19. justify-content: center;
  20. }
  21. .Square {
  22. /* position: absolute; */
  23. width: 70px;
  24. height: 70px;
  25. border-color: #99ccff;
  26. text-align: center;
  27. font-size: xx-large;
  28. font-family: 'Courier New', Courier, monospace;
  29. }
  30. /* .Row {
  31. } */
  32. .App-logo {
  33. height: 40vmin;
  34. pointer-events: none;
  35. }
  36. @media (prefers-reduced-motion: no-preference) {
  37. .App-logo {
  38. animation: App-logo-spin infinite 20s linear;
  39. }
  40. }
  41. .App-header {
  42. background-color: #282c34;
  43. min-height: 100vh;
  44. display: flex;
  45. flex-direction: column;
  46. align-items: center;
  47. justify-content: center;
  48. font-size: calc(10px + 2vmin);
  49. color: white;
  50. }
  51. .App-link {
  52. color: #61dafb;
  53. }
  54. @keyframes App-logo-spin {
  55. from {
  56. transform: rotate(0deg);
  57. }
  58. to {
  59. transform: rotate(360deg);
  60. }
  61. }
  62. body {
  63. min-height: 100%;
  64. margin: 0;
  65. padding: 0;
  66. background-color: #ffcccc;
  67. }
  68. html {
  69. height: 100%;
  70. }

我想做的是确保板子以身体为中心,因此以页面为中心。因为它是,它是在页面上的中心,但随后身体被移下。当我检查页面时,主体的顶部边缘被向下移动到与板的顶部边缘相同的水平,而不是主体在默认情况下的位置,而板在其中心。我该怎么解决?
它看起来像什么:
how-it's-going

klsxnrf1

klsxnrf11#

所以,你有一个像这样的App组件:

  1. <div>
  2. <Board />
  3. </div>

向这个DIV添加一个className,类似这样:

  1. <div className="myClass">
  2. <Board />
  3. </div>

然后在你的css上添加这个属性:

  1. .myClass {
  2. display:flex;
  3. height: 100%;
  4. align-items: center;
  5. justify-content: center;
  6. }

就是这样;)

展开查看全部

相关问题