Простым решением этой проблемы было бы расширение компонента CZButton
, чтобы он принимал свойство person
, с помощью которого данные person
могут затем отображаться во всплывающем диалоге:
/* Adapted from your codesandbox sample */
class CZButton extends React.Component {
constructor(props) {
super(props);
this.state = { open: false };
}
toggle = () => {
let { toggle } = this.state;
this.setState({ open: !this.state.open });
};
render() {
const { open } = this.state;
return (
<div>
{" "}
<button onClick={this.toggle}>Show</button>
<Drawer
open={this.state.open}
onRequestClose={this.toggle}
onDrag={() => {}}
onOpen={() => {}}
allowClose={true}
modalElementClass="modal"
containerElementClass="my-shade"
parentElement={document.body}
direction="bottom" >
{/* This render the contents of the `person` prop's `email` field in dialog */}
<div>{this.props.person.email}</div>
{/* This renders the contents of `person` prop in dialog */}
<div>{JSON.stringify(this.props.person)}</div>
</Drawer>
</div>
);
}
}
Учитывая, что ваш CZButton
теперь рендерит содержимое person
проп, вышеприведенное изменение также потребует, чтобы вы предоставили эти данные при рендеринге CZButton
в методе PersonList
компонента *1010* следующим образом:
<div className="row">
{console.log(items)}
{items.map(item => (
<Person
className="person"
Key={item.id.name + item.name.first}
imgSrc={item.picture.large}
Title={item.name.title}
FName={item.name.first} >
{/* Pass the "person item" into our new person prop when rendering each CZButton */ }
<CZButton person={item} />
</Person>
))}
</div>
Вот раздвоенная копия вашего исходного кода с упомянутыми выше обновлениями, которые вы можете попробовать.Надеюсь, это поможет!