我使用了这个 npm 包 => react-router-modal
( doc )
在该示例中(单击),只需单击一次即可从模态返回,但在我的情况下,我必须单击鼠标两次才能返回,我不知道为什么......
所以也许这里有人可以帮我回答这个问题。
该问题的快速演示-> https://youtu.be/szRC_K10pyA
完整的项目代码 -> github
以下两个最重要的组件:
零件BeerListItem
import React, { Component } from 'react';
import Card, { CardContent } from 'material-ui/Card';
import { ModalContainer, ModalRoute } from 'react-router-modal';
import { BrowserRouter, Link } from 'react-router-dom';
import 'react-router-modal/css/react-router-modal.css';
import './style.css';
import BeerProfile from '../BeerProfile';
class BeerListItem extends Component {
constructor(props) {
super(props);
this.beerProfile = this.beerProfile.bind(this);
}
beerProfile() {
const { beer } = this.props;
return (
<div>
<BeerProfile beer={beer} />
</div>
);
}
render() {
const { beer } = this.props;
let cutStr = '';
if (beer.name.length >= 27) {
cutStr = `${beer.name.slice(0, 26)}...`;
} else {
cutStr = beer.name;
}
return (
<BrowserRouter>
<div>
<Link to={`/details/${beer.id}`}>
<Card raised className="BeerListItem-main-card">
<CardContent>
<img
src={beer.image_url}
alt="beer"
className="BeerListItem-img"
/>
<div className="BeerListItem-h2-and-p-container">
<h2 className="BeerListItem-h2">{cutStr}</h2>
<p className="BeerListItem-p">{beer.tagline}</p>
</div>
</CardContent>
</Card>
</Link>
<ModalRoute
className="test-modal test-modal-foo"
path={`/details/${beer.id}`}
parentPath="/"
component={this.beerProfile}
/>
<ModalContainer />
</div>
</BrowserRouter>
);
}
}
export default BeerListItem;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
零件BeerProfile
import React, { Component } from 'react';
import { Modal } from 'react-router-modal';
import 'react-router-modal/css/react-router-modal.css';
import './style.css';
class BeerProfile extends Component {
constructor(props) {
super(props);
this.state = {
show: true,
};
this.handleBackClick = this.handleBackClick.bind(this);
}
handleBackClick() {
this.setState({ show: false });
}
render() {
console.log(this.props);
const { id } = this.props.beer;
return (
<div>
{this.state.show && (
<Modal onBackdropClick={this.handleBackClick}>
<h3>Child elements</h3>
<p>{id}</p>
</Modal>
)}
</div>
);
}
}
export default BeerProfile;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>