【发布时间】:2018-05-03 19:05:26
【问题描述】:
我正在使用拖放来实例化反应类,但由于某种原因,父组件的状态没有传递给子组件。孩子甚至没有被重新渲染,尝试过 shouldComponentUpdate 和 componentWillReceiveProps。
家长相关代码:
dragEnd(e) {
e.preventDefault();
let me = this;
let el = (
<Pie key={ Date.now() * Math.random() } yAxisData={ me.state.yAxisData } legendData={ me.state.legendData } />
)
this.setState({
cells: this.state.cells.concat(el),
});
}
所以,在放置时,创建,然后渲染看起来像:
render() {
<div className = { "insights-data" } onDrop={ this.dragEnd } onDragOver={ this.preventDefault }>
{ this.state.cells }
</div>
}
这一切都很好,但是现在当我更改传递给 this.state.yAxisData 和/或 this.state.legendData 的数据时,它不会在子组件上调用渲染。
这是子组件的渲染:
render() {
return (
<div className="insights-cell">
<ReactECharts
option={ this.create() }
style={{ position: "absolute", top: 0, bottom: 0, left: 0, right: 0, height: "100%" }}
theme="chalk"
notMerge={ true }
/>
</div>
)
}
有什么想法吗?我认为可能存在绑定问题,但似乎不是这样,因为我正在使用 me = this.它甚至没有重新渲染子组件。
【问题讨论】:
-
嗯,你举个例子here我帮你看看。
-
哦,伙计,要重新创建我在小提琴中所做的事情需要做很多工作。我可能不得不这样做,但暂时尽量避免。让我看看我是否可以做一个简单的例子并重新创建我的问题。
-
当然,一个简单的例子就足够了。
-
@stevelacerda7 在
dragEnd函数中,您已经在使用预定义的道具创建元素数组。您应该在每次渲染时创建一个新元素。 -
但是,它应该正确引用状态对象,如果它们只是引用状态对象,为什么我必须重新创建它们?我不会在任何地方覆盖我的状态对象。
标签: javascript reactjs