我已經在我的應用中使用react-router v4進行路由。我已經使用路由顯示各種形式像顯示公寓的形式,體驗的形式,登錄,註冊等react路由器需要兩次點擊來更新路由
問題
當我在公寓的圖片的點擊,反應路由器的路由公寓形式。路線變成/公寓。如果我再次點擊註冊按鈕,路線不會得到更新。我必須雙擊註冊按鈕來更新到/註冊的路線。
這裏是我的代碼
class App extends Component {
constructor(props, context) {
super(props, context);
console.log('context', context);
this.state = { show: false };
}
showModal(e) {
e.preventDefault();
this.setState({ show: true });
}
hideModal() {
this.setState({ show: false });
}
render() {
return (
<div className="container-fluid">
<Nav
showModal={(e) => this.showModal(e)}
hideModal={() => this.hideModal()}
show={this.state.show}
onHide={() => this.hideModal()}
/>
</div>
);
}
}
App.contextTypes = {
router: React.PropTypes.object
};
const Nav = (props) => (
<Router>
<div>
<nav className="navbar navbar-default">
<div className="container-fluid">
<div className="navbar-header">
<a className="navbar-brand" href="">
<img
alt="Brand"
className="img-responsive"
src={logo}
role="presentation"
/>
</a>
</div>
<div className="collapse navbar-collapse" id="collapse-1">
<ul className="nav navbar-nav navbar-right nav-social-icon">
<li className="dropdown">
<a
href=""
className="dropdown-toggle"
data-toggle="dropdown"
>
ES
<span className="caret" />
</a>
<ul className="dropdown-menu" style={{ color: '#000', fontWeight: 'bold' }}>
<li onClick={() => props.selectedLocale('en')}>
en
</li>
<li onClick={() => props.selectedLocale('es')}>
es
</li>
</ul>
</li>
<li className="btn-group regLog">
<button
className="btn btn-default"
onClick={props.showModal}
>
<Link to={{ pathname: '/signup' }}>
{props.intl.formatMessage({ id: 'nav.registration.text' }) }
</Link>
</button>
<button
onClick={props.showModal}
className="btn btn-default"
>
<Link to={{ pathname: '/login' }}>
{props.intl.formatMessage({ id: 'nav.login.text' }) }
</Link>
</button>
{props.show ?
<ModalForm
show={props.show}
onHide={props.onHide}
/> : <span />
}
</li>
</ul>
</div>
</div>
</nav>
</div>
</Router>
);
class ModalForm extends Component {
render() {
const { show, onHide, intl } = this.props;
return (
<Router>
<Modal
{...this.props}
show={show}
onHide={onHide}
dialogClassName="custom-modal"
>
<Modal.Header closeButton>
<Link to='/login' className="logTitle">
<Modal.Title id="contained-modal-title-lg">
{intl.formatMessage({ id: 'nav.login.text' })}
</Modal.Title>
</Link>
<Link to='/signup' className="logTitle">
<Modal.Title id="contained-modal-title-lg">
{intl.formatMessage({ id: 'nav.registration.text' })}
</Modal.Title>
</Link>
</Modal.Header>
<Modal.Body>
<Match pattern='/login' component={Login} />
<Match pattern='/signup' component={Signup} />
</Modal.Body>
</Modal>
</Router>
);
}
}
我想是因爲使用onClick事件和路由的。我如何解決它?
UPDATE
我試圖用路由器環境,但我越來越undefined
。 App是父組件,Nav是子組件。 Nav組件使用路由器,而onClick函數在必須處理this.context.router的App組件中處理。
感謝
您認爲哪個onClick事件是問題?另外,/ register路由的代碼在哪裏,我在你的示例中看不到它,你的意思是註冊路線嗎? – Jayce444
我的壞,它的/註冊路線。 – Serenity
我已更新我的問題。 showModal可以用於在模態中顯示錶單,但我的模態有兩種形式,一種用於註冊,另一種用於登錄。所以當點擊註冊時,註冊表格應該以模式顯示,但是如果點擊登錄,登錄表單應該以模態顯示。 – Serenity