【发布时间】:2020-10-20 15:42:21
【问题描述】:
我在 td 标签中插入 React 组件时遇到问题。这个组件应该被插入到被点击的那个 td 中。
如您所见,每个 td 都有 onClick 事件监听器用于 checkPlayer 功能。此函数检查 sign state 的值,并取决于该值 X 组件或 O 组件将插入到该特定 td 中。
你们能帮我如何渲染这样的组件吗?目前的做法只写[object object]
我的目标 - 输出
<td>{<X />}</td>
X分量,O分量差不多
import React from 'react';
//styles
import './X.scss';
function X(){
return(
<div className="X">
<p>X</p>
</div>
)
}
export default X;
App.js
function App() {
const [sign,setSign] = useState(true)
function checkPlayer(e){
//1st player
if(sign === true){
e.target.innerHTML = <X />;
setSign(false);
}
//2nd player
if(sign === false){
e.target.innerText = <O />;
setSign(true);
}
}
App.js 的 HTML 部分
return (
<div className="App">
<div className="container">
<table>
<tbody>
<tr>
<td onClick={checkPlayer}></td>
<td onClick={checkPlayer}></td>
<td onClick={checkPlayer}></td>
</tr>
<tr>
<td onClick={checkPlayer}></td>
<td onClick={checkPlayer}></td>
<td onClick={checkPlayer}></td>
</tr>
<tr>
<td onClick={checkPlayer}></td>
<td onClick={checkPlayer}></td>
<td onClick={checkPlayer}></td>
</tr>
</tbody>
</table>
</div>
</div>
);
}
【问题讨论】:
-
这种方法是非 React 的。相反,您要做的是 1) 将数组保持在存储九个字段(空白、X 或 O)的状态 2) 让
checkPlayer更新数组(并将函数重命名为handleClick或类似的东西以指示它实际上是什么确实)3)使用基本的 React 列表渲染来渲染状态 -
基本思路如下:codesandbox.io/s/dry-worker-zp695?file=/src/App.js(这显示了使用
.map()进行列表渲染以及如何更新多维数组) -
谢谢你,但我的反应没有那么远。我真的不明白你在那里做了什么
-
必须有一些简单的方法..不要像你一样使用矩阵
-
不,不是。不过,您可以使用一个包含九个元素的简单数组。 Tic Tac Toe 意味着您必须检查三排,矩阵使这变得更简单。
标签: javascript html reactjs