每当我从任何子组件调用它时,我都使用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();
}
地图(同级)
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()调用的其他函数却显示了更新的道具。