3
私はreact/reduxを使い始めてから初めてRedirect
コンポーネントを使用しているので、私はreact-router-domアプリを初めて開発しています。react-router-domでリダイレクトしますか?
認証が成功したときにRedirect
を発射したいが、認証後に必要なページにリダイレクトしない。
index.js
import { BrowserRouter as Router, Route } from 'react-router-dom';
import { createStore, applyMiddleware } from 'redux';
import ReduxThunk from 'redux-thunk';
import App from './components/app';
import Page1 from './containers/page1';
import Signin from './containers/auth/signin';
import Reducers from './reducers';
const createStoreWithMiddleware = applyMiddleware(ReduxThunk)(createStore);
const store = createStoreWithMiddleware(Reducers);
ReactDOM.render(
<Provider store={store}>
<Router>
<div>
<Route path="/" component={App}/>
<Route path="/" component={Signin}/>
<Route path="/signin" component={Signin}/>
<Route path="/page1" component={Page1}/>
</div>
</Router>
</Provider>
, document.querySelector('.container'));
signin.jsこのコードで
import { BrowserRouter as Route, Redirect } from 'react-router-dom';
import { userSignin } from '../../actions/index';
class Signin extends Component {
constructor(props) {
super(props);
this.state = { username: '', password: '' };
this.handleSubmit = this.handleSubmit.bind(this);
this.handleUsernameChange = this.handleUsernameChange.bind(this);
this.handlePasswordChange = this.handlePasswordChange.bind(this);
}
componentWillUpdate(nextProps) {
if (this.props.authenticated !== nextProps.authenticated) {
if (nextProps.authenticated) {
console.log('true?', nextProps.authenticated)
return (
<Redirect to="/page1" />
);
}
}
}
handleSubmit(e) {
e.preventDefault();
this.props.userSignin({ username: this.state.username, password: this.state.password });
this.setState({ username: '', password: '' });
}
.....
render() {
return (
<form onSubmit={this.handleSubmit}>
<input
placeholder="username"
value={this.state.username}
onChange={this.handleUsernameChange}
/>
<input
placeholder="password"
type="password"
value={this.state.password}
onChange={this.handlePasswordChange}
/>
<span>
<button type="submit">SIGNIN</button>
</span>
{this.renderError()}
</form>
);
}
}
function mapStateToProps(state) {
return {
authenticated: state.auth.authenticated,
errMsg: state.auth.err
};
}
function mapDispatchToProps(dispatch) {
return {
userSignin: ({ username, password }) => dispatch(userSignin({ username, password }))
};
}
export default connect(mapStateToProps, mapDispatchToProps)(Signin);
、これはtrue?
ログんが、/page1
にリダイレクトしません。
私が言及したように、これは初めてreact-router-dom
ライブラリを使用しています。私は自分のコードにある間違ったことをお詫びします。
ありがとうございました!代わりにRedirect
使用this.props.history.push('/path1')
の
あなたは '/ page1'ルートにリダイレクトしないと言います。どこに行くの? –
これは '/'ルートのままです。 – ckim16
Ook ...あなたの '/'ルートに 'exact path'を使ってみましょう。それがうまくいくかどうか私に教えてください。私はそれを答えに加えることができます。 {<正確な経路を経路指定する= "/"構成要素= {App} /><経路正確な経路= "/"構成要素= {標識} /> –