React,你能用Array(n).fill(0).map创建一个元素数组吗?

时间:2017-06-27 19:02:07

标签: reactjs

看来你不能,但我无法确定原因。

以下是导致问题的代码:

 public async Task<HttpResponseMessage> GetBlobDownload(int blobId)
 {
    // IMPORTANT: This must return HttpResponseMessage instead of IHttpActionResult

    try
    {
        var result = await _service.DownloadBlob(blobId);
        if (result == null)
        {
            return new HttpResponseMessage(HttpStatusCode.NotFound);
        }

        // Reset the stream position; otherwise, download will not work
        result.BlobStream.Position = 0;

        // Create response message with blob stream as its content
        var message = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StreamContent(result.BlobStream)
        };

        // Set content headers
        message.Content.Headers.ContentLength = result.BlobLength;
        message.Content.Headers.ContentType = new MediaTypeHeaderValue(result.BlobContentType);
        message.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
        {
            FileName = HttpUtility.UrlDecode(result.BlobFileName),
            Size = result.BlobLength
        };

        return message;
    }
    catch (Exception ex)
    {
        return new HttpResponseMessage
        {
            StatusCode = HttpStatusCode.InternalServerError,
            Content = new StringContent(ex.Message)
        };
    }
 }

错误将我指向文档中的页面,该页面说明必须返回有效的React元素(或null)。&#39;

我跟随这里的例子

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'))

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

1 个答案:

答案 0 :(得分: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>
    )
  }
}