Material-UI로 ReactJS를 사용하고 있는데 사용하기에 상당히 익숙합니다.새로 고침 또는 뒤로 가기 버튼을 눌렀을 때 AppBar 내용이 잘못되었습니다.
메인 메뉴/탐색 모음으로 사용되는 AppBar 구성 요소가 있습니다. AppBar 구성 요소의 제목을 내가있는 페이지를 반영하고 싶습니다. 따라서 사용자를/login으로 연결하는 버튼을 누르면 AppBar 구성 요소의 제목을 "로그인"으로 변경하려고합니다. 나는 이것을 성취했지만 몇 가지 부작용이있는 것 같아서 그것이 적절한 처방이라고 생각하지 않습니다. 순간
, 내 AppBar 구성 요소가 너무과 같습니다constructor(props, context) {
super(props, context);
this.switchToLogin = this.switchToLogin.bind(this);
this.state = {
appBarTitle: 'Home',
appBarIcon: false
};
}
: 그리고 내 생성자에서
render() {
let MenuOptionsNotLogged = ({}) => (
<div>
<FlatButton
label="Log In"
containerElement={<Link to="/login" />}
secondary
linkButton
onClick={this.switchToLogin}
/>
</div>
);
return (
<div>
<MuiThemeProvider muiTheme={muiTheme}>
<div className="headerDiv">
<AppBar
className="appBar"
showMenuIconButton={this.state.appBarIcon}
title={this.state.appBarTitle}
iconElementRight={<MenuOptionsNotLogged />}
iconElementLeft={<IconButton><BackIcon /></IconButton>}
/>
</div>
</MuiThemeProvider>
</div>
);
, 나는 AppBar의 기본 상태 (제목과 아이콘)을 설정 사용자가 로그인 페이지로 이동할 때 제목과 아이콘을 변경하는 기능이 있습니다.
문제가
이 '작동'하지만 사용자가 브라우저에서 뒤로 버튼을 새로 고치거나 누르는 경우에는 몇 가지 문제가 있습니다.
예. 사용자가/login으로 이동하고 제목이 "Login"으로 변경되면 사용자가 브라우저를 새로 고칩니다. 그러면 사용자는/로그인되지만 제목은 "집"으로 재설정됩니다.
뒤로 버튼과 동일한 문제가 발생합니다. 사용자는 로그인으로 돌아갈 수 있으며 뒤로 밀면 제목은 "집"과 반대로 "로그인"으로 유지됩니다.
@Rolodecks 'contextTypes'가 정의되지 않은 경우 컨텍스트는 빈 객체입니다.' [react docs] [https://facebook.github.io/react/docs/context.html]에서 인용. 이를 고치려면 컴포넌트에 대한'contextTypes'를 정의하십시오. 'router'는 단지 객체 일 수 있습니다. – xiaofan2406
@ xiafan2406, 두 라우터 모두 contextTypes를 다음과 같이 정의했습니다. 'MenuBar.contextTypes = { \t 라우터 : React.PropTypes.object.isRequired } ' 하지만 여전히 문제가있는 것 같습니다. 맞습니까? 편집 : Uncaught TypeError : 정의되지 않은 속성 'pathname'을 읽을 수 없습니다. – Rolodecks
@Rolodecks, 저의 실수,'react-router'의 최신 안정 버전 (2.5.2)은'this.context.location.pathname'이어야합니다. 나는 내 대답을 수정했다 – xiaofan2406