Javascript 反应:从父级更新道具时出错(无法执行removeChild)

Javascript 反应:从父级更新道具时出错(无法执行removeChild),javascript,ajax,reactjs,ecmascript-6,Javascript,Ajax,Reactjs,Ecmascript 6,我正在使用react和ajax为列表获取数据。在第一次初始化之后,当执行componentWillReceiveProps(nextrops)时,我总是会得到以下错误。当ajax的URL更改时会发生这种情况 未捕获NotFoundError:未能在“节点”上执行“removeChild”:要删除的节点不是此节点的子节点 代码如下: class QuickList extends React.Component{ constructor(props) { super(props);

我正在使用react和ajax为列表获取数据。在第一次初始化之后,当执行
componentWillReceiveProps(nextrops)
时,我总是会得到以下错误。当ajax的URL更改时会发生这种情况

未捕获NotFoundError:未能在“节点”上执行“removeChild”:要删除的节点不是此节点的子节点

代码如下:

class QuickList extends React.Component{
  constructor(props) {
    super(props);

    // set initial data to empty array
    this.state = { 
      data: [] 
    }

  }

  _loadQuickListDataFromServer(url){
    $.ajax({
      url: url,
      type: 'GET',
      dataType: 'json',
      cache: false,
      success: (data) => {
        this.setState({data: data});
      },
      error: (xhr, status, err) => {
        console.error(this.props.url, status, err.toString());
      }
    });
  }


  componentWillReceiveProps(nextProps) {
    console.log('url: ', nextProps.url);
    this._loadQuickListDataFromServer(nextProps.url);
  }

  componentWillMount(){
    console.log('url: ', this.props.url);
    // if component is mounted then fetch data from server
    this._loadQuickListDataFromServer(this.props.url);
  }

  render() {
    return (
      <div className='container-fluid text-center'>
        <div className='row'>
          <div className='col-sm-12'>
            <CustomDataTable data={this.state.data} />
          </div>
        </div>
      </div>
    );
  }
}

// defined in return of other react component
<QuickList url={quickListURL} />
类快速列表扩展了React.Component{
建造师(道具){
超级(道具);
//将初始数据设置为空数组
this.state={
数据:[]
}
}
_loadQuickListDataFromServer(url){
$.ajax({
url:url,
键入:“GET”,
数据类型:“json”,
cache:false,
成功:(数据)=>{
this.setState({data:data});
},
错误:(xhr、状态、错误)=>{
console.error(this.props.url,status,err.toString());
}
});
}
组件将接收道具(下一步){
log('url:',nextrops.url);
这.\u loadQuickListDataFromServer(nextrops.url);
}
组件willmount(){
log('url:',this.props.url);
//若安装了组件,则从服务器获取数据
这.\u loadQuickListDataFromServer(this.props.url);
}
render(){
返回(
);
}
}
//在返回其他react组件时定义

有什么想法吗?

因为问题出在
CustomDataTable
上,您可以尝试在那里进一步解析以调试问题,但在看不到代码的情况下,我唯一建议的是在URL更改时强制卸载该组件

<CustomDataTable key={this.props.url} data={this.state.data} />


这将导致组件在密钥更改时重新安装。

如果删除
组件,是否仍会出现错误?我想知道是不是里面有什么东西,而不是你的快速列表组件。如果您使组件具有一个将随新数据更改的密钥,则会强制该组件卸载并重新装载。您是对的。如果我删除了,那么我就不会得到错误。但是如何解决传递新数据的问题呢?是的,就是这样。可以在这里找到:太棒了!卸下坐骑的想法很好!我猜react想让我们知道一大堆运动部件,以便有一个平滑的ui