尝试更新已卸载的组件时遇到错误?

时间:2018-07-31 14:50:06

标签: javascript reactjs

我正在使用react-meteor从mongodb集合中获取数据。我将loading作为功能组件的支持。 loading是布尔值,当准备好获取整个数据时,它将为true。我想在网页上显示JSON响应中的内容,但出现错误:尝试更新已卸载的组件。

代码:

import React, { Component } from "react";
import { Meteor } from "meteor/meteor";
import { withTracker } from "meteor/react-meteor-data";

const Header = ({ allnavitems, loading }) => {
  if (loading) {
    let navlist = allnavitems;

    console.log(navlist.length);
    console.log(navlist[0]);

    return (
      <div>
        <h3>{navlist[0]}</h3>
      </div>
    );
  }
};

export default withTracker(params => {
  const navitems = Meteor.subscribe("league_navbar", "");

  return {
    loading: navitems.ready(),
    allnavitems: NavigationItems.find().fetch()
  };
})(Header);

我尝试了上面的代码,但它给出了错误。可能是什么原因?在控制台中,我收到错误消息:尝试更新已经卸载的组件。

如果我将上面的标题组件更改为以下标题,那么我只能在网页上看到“正在加载...”,但是在获取数据后即加载为true时,它应该显示navlist [0]。

const Header = ({allnavitems, loading}) => {

    if(loading){
        let navlist = allnavitems

        console.log(navlist.length)
        console.log(navlist[0])

    return(
        <div>
            <h3>{navlist[0]}</h3>         
        </div>
    )

    }else{
        return(
        <div><p>Loading...</p>
        </div>
        )
    }

}

屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:1)

您不能使用react渲染对象。您可能希望通过解压缩您关心的每个项目的属性,在导航项目上映射并为每个项目呈现一个链接或类似内容,

[Route("edit/{person_id}")]
public IActionResult edit(long person_id)
{
    //some stuffs
    return View();
}