У меня возникла интересная проблема. У меня есть родительский компонент, у которого есть массив объектов, которые передаются дочернему компоненту, который является TreeView, то есть он рекурсивный. Я передаю функцию и пару других реквизитов для ребенка, а также массив объектов, которые рекурсивно обрабатываются дочерним элементом. При регистрации реквизита в функции рендеринга ребенка на первом рендере все реквизиты есть, но по мере того, как рекурсивная функция перемещается по каждому объекту в массиве, она «теряет» все остальные реквизиты, которые не обрабатываются рекурсивно.Как передать реквизиты рекурсивному дочернему компоненту и сохранить все реквизиты
Когда компонент первым делает объект реквизита является: prop1, prop2, arrayOfObjects
Как повторно обрабатывается как рекурсия происходит, реквизит объекта в ребенке становится: 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/
Единственная разница в том, что внутри переключателя fu nction, я пытаюсь вызвать setVisibleSection в родительском, но без кубиков.
Вот фотография консоли показывает реквизит, когда компонент сначала делает, а затем после рекурсии:
Я добавил изображение выше, показывающий опоры объекта 'опустели' во время рекурсии. У меня больше нет доступа к функции setVisibleSection после рекурсии. Единственной опорой, которая оставлена, является опорная точка узла.Если я не передаю реквизиты узла до ребенка, все реквизиты остаются нетронутыми. –