[英]React: Array length changes not triggering re-render in child component
在 React 中,我有一個主題列表,每個主題都有一個嵌套的集合列表。 主題呈現集合的長度和集合。 有時我需要將一組主題從一個主題移動到另一個主題。 我可以在正確移動后重新渲染設置,但設置長度不會在視覺上改變。 我相信這是改變狀態的一個問題,但我相信我在對它進行任何更改之前用 this.state.Topics.slice() 復制我的主題數組來彌補這一點。
主題列表.js
ChangeSetsTopic(event)
{
var sourceTopic;
var topics = this.state.Topics.slice();
sourceTopic = topics.find(obj => {return obj.Topic == event.source.droppableId});
var change_set;
for (var i = sourceTopic["Sets"].length - 1; i >= 0; --i) {
if (sourceTopic["Sets"][i].SetID == event.draggableId) {
change_set = sourceTopic["Sets"].splice(i,1)[0];
}
}
var destinationTopic = topics.find(obj => {return obj.Topic == event.destination.droppableId});
destinationTopic["Sets"].push(change_set);
for (var i = 0 ; i < topics.length ; i++) {
if (topics[i].Topic == sourceTopic.Topic) {
topics[i] = sourceTopic;
}
else if (topics[i].Topic == destinationTopic.Topic) {
topics[i] = destinationTopic;
}
}
this.setState({"Topics" : topics });
}
render(){
return( {this.state.Topics.map(( topic , key ) => (
<Topic key={topic.Topic} Sets={topic.Sets} TopicName={topic.Topic}/>
))}
);}
主題.js
componentDidUpdate(prevProps) {
if(prevProps.Sets.length.toString() != this.props.Sets.toString() )
{
this.setState({"Sets" : this.props.Sets })
}
}
render(){
return( ... <div>this.state.Sets.length.toString()</div> ...)
}
Topics
數組改變,React 可以看到它更新,但它看不到數組中的單個項目更新,項目是對象,React 通過引用而不是內容比較對象,所以它看不到那里的變化。
例如, destinationTopic
是一個對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.