【问题标题】:React, can you make an array of elements with Array(n).fill(0).map?React,你能用 Array(n).fill(0).map 做一个元素数组吗?
【发布时间】:2023-04-04 19:49:01
【问题描述】:

似乎你不能,但我无法确定原因。

这是导致问题的代码:

class App extends React.Component {

  render() {

    var elems = Array(~~(this.props.number)).fill(0).map( ()=> <div>test</div>);

    console.log(elems); //(5) [Object,Object,Object,Object,Object]

    return (
      {elems}
    )
  }
}

ReactDOM.render(<App number='5' />, document.querySelector('#app'))

错误将我指向文档中的一个页面,该页面显示“必须返回有效的 React 元素(或 null)。”

我按照这里的例子

https://facebook.github.io/react/docs/lists-and-keys.html (Basic List Component)

那是使用数组,所以它可能,但不知何故挖掘不同。

【问题讨论】:

  • 基本上,对于内联 JSX 表达式,您必须将其包装在一些 JSX 父元素中才能将其解释为内联 JSX 表达式。实际上,您正在返回一个对象 { elems: elems },因为它被解释为 ({ elems }),这是一个具有速记属性的对象。

标签: reactjs


【解决方案1】:

正如@Andrew Li 指出的那样,原始代码返回了一个非 React Element 对象,这是错误的根源。 React 期望返回一个对象,但类型 {elems: elems} 无效。

React 组件只能(当前)返回单个元素(请参阅React Component docs 中的警告)而不是数组。用父母包装你的数组应该可以解决问题。

class App extends React.Component {

  render() {

    var arr = Array(~~(this.props.number)).fill(0).map( ()=> <div>test</div>);

    return (
      <div>
        {elems}
      </div>
    )
  }
}

【讨论】:

  • 但它实际上不是他们返回的数组,它是一个对象文字......
  • 这是一个数组。 map() 正在返回一个对象数组——特别是 React Elements。
  • 没错,但return ({ elems }) 被解释为具有速记属性的对象字面量
  • 确实如此。我将其误读为 JSX 分隔 javascript。希望我回答了 OP 打算提出的问题:/
猜你喜欢
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
  • 2019-02-13
  • 1970-01-01
相关资源
最近更新 更多