React未渲染的子函数不使用更新的道具

时间:2019-11-23 18:49:32

标签: reactjs parent-child refs

每当我从任何子组件调用它时,我都使用refs更新我正在使用的传单地图。 表格组件调用 Home 函数,该函数调用 myRef ,该函数调用 Map内部的 updateMap 函数。 组件。为了说明:

表(同级)

somefunction() {
  ...
  this.props.updateMap(); // calls updateMap() inside home
  ...
}

家庭(根)

render() {
  return (
    <Map ref={this.myRef} />
    <Table updateMap={this.updateMap} />
  )
}

updateMap() { // calls updateMap in Map from Home
    console.log(this.myRef); // prints the image below (notice json)
    this.myRef.updateMap();
}

enter image description here

地图(同级)

render() { // rerendered with updated json
  const { json } = this.props;
  console.log(json); // prints {...} data
  ...
  ... // other functions but updateMap() (intentional)
}

地图

updateMap() { // only called from other sibling components
    const { json } = this.props;
    console.log(json); // prints {} undefined
}

问题不在于map内的函数正在被调用(这是我想要的),其原因在于它不使用更新的道具。 Map渲染两次,在此期间,其内部的每个函数都使用更新的道具,但updateMap()从未在Map组件内调用/渲染(意图)。

仅由另一个兄弟/子组件调用。因此,当它被调用时,它需要从Home访问更新的道具,但其道具仅显示Home最初渲染时提供的默认道具。我不明白,因为map中的其他功能正在使用更新的道具。换句话说,除updateMap()之外,地图中的每个函数都使用更新后的道具,但本身使用了

为什么在map内调用render()未调用的函数仅在最初加载组件时才具有默认道具,而render()调用的其他函数却显示了更新的道具。

0 个答案:

没有答案