我遇到了一個有趣的問題。我有一個父組件,它有一個對象數組傳遞給一個TreeView的子組件,這意味着它是遞歸的。我將一個函數和一些其他道具傳遞給子對象,以及由子對象遞歸處理的對象數組。當在孩子的渲染函數中記錄道具時,在第一次渲染時,所有道具都在那裏,但是隨着遞歸函數移動數組中的每個對象,它會丟失所有其他沒有被遞歸處理的道具。如何將道具傳遞給遞歸子組件並保留所有道具
當組分首先渲染道具對象是:爲prop1,PROP2,arrayOfObjects
由於它重新呈現爲遞歸正在發生,道具對象在子變爲:arrayOfObjects。
prop1和prop2已經消失。
最終的結果是,我無法從子項中調用父項中的函數,所以無法根據樹中單擊哪個節點來更新狀態。我沒有使用redux,因爲這是一種風格指南 - 與我們的產品應用程序分開,這意味着僅適用於開發人員,並且如果可能,我希望從組件內部處理所有狀態。
還有一個問題 - 對象數組是我們styleguide中文件的文件夾結構,我需要能夠單擊列表中的名稱,並使用該文件的內容更新視圖。這在文件沒有任何子項時工作正常,但是當有子節點時,如果我單擊父項,則會單擊該子項。我試過e.stopPropagation(),e.preventDefault()等,但沒有任何運氣。提前致謝。
家長:
import React, {Component} from 'react'
import StyleGuideStructure from '../../styleguide_structure.json'
import StyleTree from './style_tree'
class StyleGuide extends Component {
constructor(props) {
super(props)
let tree = StyleGuideStructure
this.state = {
tree: tree
}
這是函數想我從孩子
setVisibleSection(nodeTitle) {
this.setState({
section: nodeTitle
})
}
render() {
return(
<TreeNode
className="class-name-here"
setVisibleSection={this.setVisibleSection.bind(this)}
node={this.state.tree}
/>
)
}
}
export default StyleGuide
實際上,這就是我對孩子,這裏小提琴撥打:
https://jsfiddle.net/ssorallen/XX8mw/
唯一的區別是在裏面的切換fu我試圖在父母中調用setVisibleSection,但沒有骰子。
我已經添加上述表示遞歸期間對象被 '排空' 道具的圖像。遞歸之後,我不再能夠訪問setVisibleSection函數。剩下的唯一道具是節點道具。如果我沒有將節點道具傳遞給孩子,所有的道具都保持不變。 –