componentDidUpdate prevProps 给了我当前/新的道具

Posted

技术标签:

【中文标题】componentDidUpdate prevProps 给了我当前/新的道具【英文标题】:componentDidUpdate prevProps gives me current / new props 【发布时间】:2017-01-17 00:23:24 【问题描述】:

我正在尝试整合传单地图,但我认为这不是问题所在。无论如何,要重新渲染我的地图,我想使用 componentDidUpdate 来查看道具是否发生了变化,我从父组件向下传递给我的地图组件。但是现在问题来了,每当我尝试console.log(prevProps.xx, this.props.xx) 时,它们都完全相同,即使我刚刚更新了它,所以我不能真正使用 componentDidUpdate,还有其他方法吗? componentWillReceiveProps 也不起作用,当我在父组件更新我的状态并将其传递给我的地图组件时,它总是 1:1 相同,所以无法比较。

这是我的代码:

var Map = React.createClass(

map: null,
tileLayer : null,

componentDidMount: function() 
   // code to run just after the component "mounts" / DOM elements are created
   // make the AJAX request for the GeoJSON data
   // create the Leaflet map object
   if (!this.map) this.init('mapid');
 ,
 componentWillReceiveProps: function(nextProps) 
   console.log(nextProps.labels, this.props.labels);
 ,
 componentDidUpdate(prevProps, prevState) 
   const zoom = this.props.labels.zoom;
   const mapstyle = this.props.labels.mapstyle;
   const latlng = [this.props.labels.lat, this.props.labels.lng];
   this.map.setView(latlng);
   this.tileLayer.setUrl(mapstyle);
   console.log(prevProps.labels, this.props.labels);
  ,

 init: function(id) 
  const zoom = this.props.labels.zoom;
  const mapstyle = this.props.labels.mapstyle;
  const latlng = [this.props.labels.lat, this.props.labels.lng];
  if (this.map) return;
  // this function creates the Leaflet map object and is called after the Map component mounts
  this.map = L.map(id).setView(latlng,zoom);


  // a TileLayer is used as the "basemap"
  this.tileLayer = L.tileLayer(mapstyle).addTo(this.map);

  // set our state to include the tile layer
  ,
  render: function()
    return(
      <div></div>
    )
  ,

  );

【问题讨论】:

你正在改变同一个对象,所以它总是一样的,你应该返回一个新对象。制作地图变量的副本,然后重试。 【参考方案1】:
    创建一个新的状态元素,比如说response 将道具分配给response 尝试在render()里面写函数

【讨论】:

以上是关于componentDidUpdate prevProps 给了我当前/新的道具的主要内容,如果未能解决你的问题,请参考以下文章

mapStateToProps,但未调用componentDidUpdate

componentDidUpdate 没有触发

如何处理 ComponentDidUpdate 中的异步数据?

与 setState 回调相比,使用 componentDidUpdate 有啥优势?

如何测试 componentDidUpdate()?

检查两个数组是不是包含相同的对象 - 反应 componentDidUpdate [重复]