我是编码新手并且已经使用JS完成了一些在线课程,目前我正在阅读ReactJS Tic Tac Toe教程(here)。我理解一般逻辑,但是对于Board类中的构造函数正在做什么感到困惑:
class Board extends React.Component {
constructor(props) {
super(props);
this.state = {
squares: Array(9).fill(null),
};
}
renderSquare(i) {
return <Square value={i} />;
}
render() {
const status = 'Next player: X';
return (
<div>
<div className="status">{status}</div>
<div className="board-row">
{this.renderSquare(0)}
{this.renderSquare(1)}
{this.renderSquare(2)}
</div>
<div className="board-row">
{this.renderSquare(3)}
{this.renderSquare(4)}
{this.renderSquare(5)}
</div>
<div className="board-row">
{this.renderSquare(6)}
{this.renderSquare(7)}
{this.renderSquare(8)}
</div>
</div>
);
}
}
根据我的理解,它正在初始化电路板和电路板状态,但是当我调整代码并改变空数组中定义的方块数时,它不会改变电路板/游戏的功能。但是,如果我删除了数组,代码会崩溃。构造函数的目的是什么?为什么更改数组长度不等于板上的方块数不会影响游戏,但不包括数组呢?
答案 0 :(得分:0)
这里的构造函数在超级调用中设置了反应组件的props和初始状态。
您实际上从未在任何地方引用状态变量。每次调用render square时,您只需使用该索引渲染一个新的方形组件。没有神奇的幕后连接。
答案 1 :(得分:0)
在组件中使用state
之前,需要初始化state
对象。要初始化state
,请将属性state
设置为类中的纯JavaScript对象&#39;构造方法。例如:
import React, {Component} from react;
class SearchBar extends Component {
constructor(props)
super(props)
this.state = {term: ' '};
render() {
return <input onChange={event => console.log(event.target.value)} />;
}
}
这是我们在基于类的组件中初始化state
的方法。
所有JavaScript类都有一个名为constructor
的特殊函数。 constructor
函数是第一个也是唯一一个在创建类的新实例时自动调用的函数。
组件本身有自己的constructor
功能。当我们定义一个已经在父类上定义的方法Component
时,我们通过调用super
在父类上调用该父方法。
每当我们使用state
时,我们通过创建一个新对象并将其分配this.state
来初始化它,我们传递的对象也将包含我们要在state
上记录的属性,在你的情况下是squares:
。
您可以在此处了解更多信息:https://reactjs.org/docs/react-component.html#constructor