У меня возникли некоторые проблемы в небольшом приложении, которое я создаю с использованием React, где я создаю дерево узлов, состоящее из корневого узла, дочерних узлов и узлов внуков.Кажется, я не могу получить модал React Bootstrap, обращающийся к правильной реквизите id дочернего узла, когда я запускаю функцию show модала.
В моем компоненте страницы я отображаю набор дочерних элементов в кореньузел.Как часть рендеринга дочернего элемента, я передаю данные от родителя, чтобы затем заполнить модальное поле, из которого вы можете редактировать имя этого дочернего узла.Код для дочернего узла приведен ниже:
import React, { Component } from 'react';
import "./Nodes.css"
import GrandchildNode from "./GrandchildNode"
import EditNameForm from '../Form/EditNameForm/index';
import { MyModal } from '../Modals';
class ChildNode extends Component {
constructor(props) {
super(props)
this.state = {
modalId: this.props.id
}
}
componentDidMount = () => {
console.log(this.state.modalId)
}
render() {
//console.log(this.state)
let grandchildren = true;
if (this.props.grandchildren.length === 0) {
grandchildren = false
}
return (
<div className='childWrapper'>
<div className="childHeader">
<div className="text" key={this.props.id}>{this.props.name}</div>
<button className="edit" onClick={this.props.showNameEdit}>EDIT
NAME</button>
<button className="delete" onClick={() =>
this.props.handleDelete(this.props.id)}>X</button>
</div>
<div className="childBody">
{grandchildren ?
this.props.grandchildren.map(item => {
return <GrandchildNode key={item.id} name={item.name} parent= {item.parent} value={item.value}></GrandchildNode>
}) : <div>No grandchildren to render</div>
}
</div>
<MyModal
show={this.props.showName}
onHide={this.props.handleModalClose}
>
<EditNameForm
errors={this.props.errorFields}
handleInputChange={this.props.handleInputChange}
name={this.props.name}
newName={this.props.newName}
handleModalClose={this.props.handleModalClose}
handleFormSubmit={this.props.handleNameEdit}
id={this.props.id}
/>
</MyModal>
</div>
)
}
}
export default ChildNode;
Когда открывается модал для редактирования, кажется, что он визуализирует модал один раз для каждого потомка, и поэтому последний потомок в списке становится тем,который редактируется - например: идентификатор Child1 - "abcd", идентификатор Child2 - "efgh";Когда я открываю модальное окно для редактирования Child1, я фактически редактирую Child2, потому что идентификатор Child2 был передан в модальное окно.Я могу подтвердить это с помощью некоторого кода, который я добавил в свой компонент EditNameForm:
class EditNameForm extends Component {
state={
id:this.props.id
}
componentDidMount(){
console.log(this.state.id)
}
Файл console.log (this.state.id) выдает что-то вроде этого:
5c6311aa2b0593287832b0a2 EditNameForm.js:10
5c63177d7124e5333886d91d EditNameForm.js:10
I 'Я пытался понять, что здесь происходит, и у меня есть некоторые теории, но они предчувствуют - кто-нибудь с большим опытом React, пожалуйста, помогите мне понять а) что здесь происходит и б) как я могу настроить это так, чтобы модальныйоткрывается с правильным id проп?