質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

363閲覧

ルートコンポーネントでconnectを使うと上手くルーティングできない

atemu

総合スコア94

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2018/06/07 06:53

編集2018/06/07 06:55

ReactReduxを使い始めました。

js

1import React, { Component } from 'react'; 2import { Switch, Route, Redirect, Link } from 'react-router-dom'; 3import UserOnly from './containers/UserOnly'; 4import Top from './containers/Top'; 5import Auth from './containers/Auth'; 6 7export default class App extends Component { 8 render() { 9 return ( 10 <div className="App"> 11 <ul> 12 <li><Link to="/">トップページ</Link></li> 13 <li><Link to="/home">ユーザ専用ページ</Link></li> 14 </ul> 15 <Switch> 16 <Route exact path="/" component={Top} /> 17 <Auth> 18 <Route exact path="/home" component={UserOnly} /> 19 </Auth> 20 </Switch> 21 </div> 22 ); 23 } 24} 25

このようになっているルートコンポーネントを、

js

1import React, { Component } from 'react'; 2import { Switch, Route, Redirect, Link } from 'react-router-dom'; 3import UserOnly from './containers/UserOnly'; 4import Top from './containers/Top'; 5import Auth from './containers/Auth'; 6import { connect } from 'react-redux'; 7import * as actions from '../actions/user'; 8 9class App extends Component { 10 componentDidMount() { 11 this.props.onAuthStateChanged(); 12 } 13 render() { 14 return ( 15 <div className="App"> 16 <ul> 17 <li><Link to="/">トップページ</Link></li> 18 <li><Link to="/home">ユーザ専用ページ</Link></li> 19 </ul> 20 <Switch> 21 <Route exact path="/" component={Top} /> 22 <Auth> 23 <Route exact path="/home" component={UserOnly} /> 24 </Auth> 25 </Switch> 26 </div> 27 ); 28 } 29} 30 31const mapStateToProps = (state) => ({ 32}); 33 34const mapDispatchToProps = dispatch => ({ 35 onAuthStateChanged() { 36 dispatch(actions.onAuthStateChanged()); 37 } 38}); 39 40export default connect(mapStateToProps, mapDispatchToProps)(App);

このようにしたいのですが、これだとルーティングが上手く行きません。
ルートコンポーネントはそもそもコンテナにしてはいけないのでしょうか?
だとしたら、どのように書くのがベストなのでしょうか?
よろしくお願いします。

ちなみに、index.jsはこんなかんじです。

js

1import React from 'react'; 2import ReactDOM from 'react-dom'; 3import { Provider } from 'react-redux'; 4import { ConnectedRouter } from 'react-router-redux'; 5import { history } from './history'; 6import App from './App'; 7import registerServiceWorker from './registerServiceWorker'; 8import configureStore from './configureStore'; 9 10const store = configureStore(); 11 12ReactDOM.render( 13 <Provider store={store}> 14 <ConnectedRouter history={history}> 15 <App /> 16 </ConnectedRouter> 17 </Provider>, 18 document.getElementById('root') 19); 20 21registerServiceWorker();

他に必要な情報があれば書いていってくれると嬉しいです!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

withRouterを使う

投稿2018/06/07 07:12

atemu

総合スコア94

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問