【发布时间】:2017-07-02 03:09:53
【问题描述】:
我遇到了一个有趣的问题。我有一个父组件,它有一个对象数组,这些对象被传递给一个 TreeView 的子组件,这意味着它是递归的。我正在向孩子传递一个函数和几个其他道具,以及由孩子递归处理的对象数组。在子项的渲染函数中记录道具时,在第一次渲染时,所有道具都在那里,但是当递归函数在数组中的每个对象中移动时,它会“丢失”所有其他未被递归处理的道具。
组件第一次渲染时props对象为:prop1,prop2,arrayOfObjects
随着递归的发生而重新渲染,子对象中的 props 对象变为:arrayOfObjects。
prop1 和 prop2 消失了。
最终结果是我无法从子级调用父级中的函数,因此我无法根据单击树中的哪个节点来更新状态。我没有使用 redux,因为这是一个样式指南 - 与我们的生产应用程序分开,它仅供开发人员使用,而且很简单,所以如果可能的话,我想从组件中处理所有状态。
还有另一个问题 - 对象数组是我们样式指南中文件的文件夹结构,我需要能够单击列表中的名称,并使用该文件的内容更新视图。当文件没有任何子节点时,这可以正常工作,但是当有子节点时,如果我单击父节点,则会单击子节点。我已经尝试过 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/
唯一的区别是在切换函数内部,我试图在父级中调用 setVisibleSection,但没有骰子。
【问题讨论】:
-
我添加了上面的图像,显示了在递归期间被“清空”的 props 对象。递归后我不再可以访问 setVisibleSection 函数。剩下的唯一道具是节点道具。如果我不将节点道具传递给孩子,所有道具都保持不变。
标签: reactjs recursion tree treeview