为什么将数组作为道具传递时会转换为对象?

Why does an array get converted to an object when passing it as props?

我正在尝试将每个数组项映射到它自己的 div(以创建一个 TicTacToe 棋盘)。但是,当我从 props 传入它时,它被识别为一个对象。这是一个例子:

这是我的 App.js 文件:

class App extends Component {
  state = {
    gameBoard: Array(9),
  }

  render() {

    console.log(this.state.gameBoard)
    console.log(Array.isArray(this.state.gameBoard))

    return (
      <div className="App">
        <Board squares={this.state.gameBoard}/>
      </div>
    );
  }
}

export default App;

这是我的 Board.js 组件文件:

function Board(squares) {

    console.log(squares)
    console.log(Array.isArray(squares))

    return (
        null
    )

}

export default Board

控制台登录 App.js 按预期工作产生:

//(an array)

" (9) [empty × 9] "
"true"

然而,控制台登录Board.js yield:

//(an object)

"{squares: Array(9)}"
"false"

我很好奇为什么会这样。 另外,如果有办法,我怎样才能让我的组件将道具识别为数组?

Board 组件中的 squares 参数是一个 prop 对象。如果你尝试 squares.squares 应该 return 一个 Array

function Board(squares) {
    // This is the prop object that react passes to a child component.
    console.log(squares);
    console.log(squares.squares)
    console.log(Array.isArray(squares.squares))

    return (
        null
    )

}

export default Board

Board 组件接收的是 props 对象,在您的情况下,它的属性之一将是 squares。所以你的 Board 代码应该是:

function Board(props) {

    console.log(props.squares)
    console.log(Array.isArray(props.squares))

    return (
        null
    )

}

export default Board