jsに反応するのは初めてで、簡単なマジックスクエアゲームを構築しようとしています。私は初期値を設定することができます。私は親コンポーネントに反映させるためにユーザー入力を得る方法を考え出すのに悩まされています。すなわち、ボードクラスのhandleChange(i)メソッドの空のSquareに入力された新しい値をsquares [i]に設定します。反応onChangeバインド値を親の配列
class Square extends React.Component {
render()
{
return (
<input type="text" className="square" value={this.props.value} onChange={this.handleChange}>
</input>
);
}
}
/* Defines the Main Game Board */
class Board extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
/*Array to store Random numbers*/
const randArray = [];
for(var i = 0; i < 3; i++)
{
var numberIsInArray = false;
var rand = generateRandomNumb(1, 9);
for(var j = 0; j < randArray.length; j++){
if(rand === randArray[j]) {
numberIsInArray = true;
i--;
}
}
if(!numberIsInArray){
randArray.push(rand);
}
}
/*function to generate Random Numbers*/
function generateRandomNumb(min, max)
{
return Math.floor(Math.random() * (max - min) + min);
}
function check(grid_val, arr)
{
if (arr[0] === grid_val || arr[1] === grid_val || arr[2] === grid_val)
return grid_val;
}
this.state = {
squares: Array(
(4,check(4,randArray))
,(9,check(9,randArray))
,(2,check(2,randArray))
,(3,check(3,randArray))
,(5,check(5,randArray))
,(7,check(7,randArray))
,(8,check(8,randArray))
,(1,check(1,randArray))
,(6,check(6,randArray))
)
};
}
handleChange(i) {
const squares = this.state.squares.slice();
squares[i] = '';
//this.setState({squares: squares});
}
renderSquare(i) {
return (
<Square
value={this.state.squares[i]}
onChange={this.handleChange(i)}
/>
);
}
render() {
const status = this.state.squares;
return (
<div>
<div className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h2>Sudoku React</h2>
</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>
<button onClick={() => window.location.reload()}>Start New Game</button>
</div>
</div>
);
}
}
export default Board;