React入门2:创建界面
首先
我希望通过这篇文章来复习并记录备忘,同时也想在多篇文章中使用React来开发井字棋游戏(三连棋)。
-
- React
-
- CodeSandbox(公式)
- CodeSandbox(非公式の日本語ガイド)
系列列表
-
- React入门1:环境搭建[在线版]
-
- React入门1.5:环境搭建[本地版-番外篇]
React入门2:棋盘的创建(本次)
React入门3:交互的实现
React入门4:重构[提升篇]
React入门5:重构[交互篇]
React入门6:回合的实现
React入门7:游戏胜利判断
React入门8:文本的实现
React入门9:时间旅行(1)
React入门10:时间旅行(2)
React入门11:时间旅行(3)
关于目的
是每个人都朝着共同的目标努力
我们将在React公式教程中使用3×3的方格来实现井字游戏。
这次的目的
开始创建一个由3×3网格构成的面板。现在开始编码。
研發
您可以在下一页上查看上次的源文件。
- 前回の内容はコチラから!
创建盐池
让我们在App.js中写下以下代码。
export default function Square() {
return (
<button className="square">X</button>
);
}
默认输出表示在导入App.js时将执行的组件(函数)。这里,通过将App.js导入到index.js中,调用了Square组件。请注意,组件名称必须以大写字母开头。
当看到这个文本的时候,我们可以发现里面描述了一个
使用这个设置,将会显示标有「X」的方块。
由于现在的样式看起来很乏味,所以将在styles.css中对方框进行装饰。
.square {
background: #fff;
border: 1px solid #999;
float: left;
font-size: 24px;
font-weight: bold;
line-height: 34px;
height: 34px;
margin-right: -1px;
margin-top: -1px;
padding: 0;
text-align: center;
width: 34px;
}
为了反映装饰性,我们会在App.js中加载styles.css文件。
import "./styles.css";
export default function Square() {
return (
<button className="square">X</button>
);
}
这样就会应用 styles.css 的样式。
创建交易界面
接下来我们展示多个方格,并创建棋盘。
展示两个空间
首先,我们将显示两个方格。
import "./styles.css";
export default function Square() {
return (
<>
<button className="square">X</button>
<button className="square">X</button>
</>
);
}
碎片 <>
在该文中,有两个
-
- プログラム
-
- return (
-
- );
エラー
/src/App.js: Adjacent JSX elements must be wrapped in an enclosing tag.
Did you want a JSX Fragment <>…</>?
创建一个3×3的游戏板
和显示两个方块一样,让我们在return语句中填写9个
import "./styles.css";
export default function Square() {
return (
<>
<button className="square">X</button>
<button className="square">X</button>
<button className="square">X</button>
<button className="square">X</button>
<button className="square">X</button>
<button className="square">X</button>
<button className="square">X</button>
<button className="square">X</button>
<button className="square">X</button>
</>
);
}
动作结果将以一行显示9个方格。
因此,我们可以使用
元素将每个
元素应该具有相同的 className。
import "./styles.css";
export default function Square() {
return (
<>
<div className="board-row">
<button className="square">X</button>
<button className="square">X</button>
<button className="square">X</button>
</div>
<div className="board-row">
<button className="square">X</button>
<button className="square">X</button>
<button className="square">X</button>
</div>
<div className="board-row">
<button className="square">X</button>
<button className="square">X</button>
<button className="square">X</button>
</div>
</>
);
}
为了将每个项目显示为一行,请在styles.css文件中添加以下内容。使用::after伪元素可以对
元素后面的样式进行设置。
.board-row::after {
clear: both;
content: "";
display: table;
}
用这些就可以组成一个3×3的棋盘了。
组件的分解
回顾一下这里的 App.js 程序,我们可以看到通过在 Square 组件中直接编写多个方块,来创建棋盘呢。
让我们将此分解成以下的构成方式。
Board コンポーネント (親コンポーネント)
盤上を構成する要素
複数の Square コンポーネントを呼ぶ
Square コンポーネント (子コンポーネント)
マスを構成する要素
呼ばれるときには、マス内に表示する文字を受け取る
让我们将App.js的程序改为以下方式。
Board コンポーネントを実装する
「export default function Square()」のリネーム
コンポーネント名 Square() を Board() に変更する
を に変更する
新たに Square コンポーネントを実装する
プロパティ(引数)として value を加える
import "./styles.css";
function Square({ value }) {
return <button className="square">{value}</button>;
}
export default function Board() {
return (
<>
<div className="board-row">
<Square value="X" />
<Square value="X" />
<Square value="X" />
</div>
<div className="board-row">
<Square value="X" />
<Square value="X" />
<Square value="X" />
</div>
<div className="board-row">
<Square value="X" />
<Square value="X" />
<Square value="X" />
</div>
</>
);
}
花括号 {} 的语法意义
注意到在 Square 组件中有花括号 {}。在使用 JSX 中的 JavaScript 语法时,需要这些花括号。在 Square 组件中,{value} 被写入,以实现以下两个目的。
Square コンポーネントのプロパティを設定する
プロパティの値を
让我们试试省略这个的结果会如何。
function Square(value) {
return <button className="square">value</button>;
}
结果,value被识别为字符串。这表明它与HTML中的
最后
这次我们使用 Square 组件和 Board 组件来创建游戏板。下一页会展示当前阶段的源文件。
下一步我们将在棋盘上添加鼠标交互功能!