2016-03-17 27 views
10

私はしばらくこの戦いをしてきました!リアクタ - ルータ - Reduxとリアクトブートストラップ

私はいつもロゴを持っている 'メインのアプリケーションコンテナ'を持っていたい、ナビゲーション...私はそれをかわいくするために反応するブートストラップを使いたい。私が問題に実行している瞬間に

は、私のプロジェクトをオフに基づいていますdavezukoの「反応-Reduxのスターター・キット」

私は、プロバイダの内部ルートコンテナに私のブートストラップ<NavBar><LinkContainers>のすべてを入れてみました。

すべてが表示され、うまく見えますが、私のリンクは機能しません。通常の反応ルータを置くと、同じ問題が発生します。<Link>

は、私はよく、経路によって呼び出されたビューでの作業をリンクし、考え出したので、私は 輸出デフォルト(ストア)=>(

バベル、eslint後のルートにこのすべてをコピーしてWebPACKのこれを許可しますコンパイルするには、このページは表示されません。また、react-devコンソールを見ても、これらの反応ノードは表示されません。

ここに私が持っているものは、Root.js:

import React, { PropTypes } from 'react'; 
import { Provider } from 'react-redux'; 
import { Router } from 'react-router'; 

import { IndexLink, Link } from 'react-router'; 

import NavBar from 'react-bootstrap/lib/Navbar'; 
import Nav from 'react-bootstrap/lib/Nav'; 
import NavItem from 'react-bootstrap/lib/NavItem'; 
import LinkContainer from 'react-router-bootstrap/lib/LinkContainer'; 

export default class Root extends React.Component { 
    static propTypes = { 
    history: PropTypes.object.isRequired, 
    routes: PropTypes.element.isRequired, 
    store: PropTypes.object.isRequired 
    }; 

    get content() { 
    return (
     <Router history={this.props.history}> 
     {this.props.routes} 
     </Router> 
    ); 
    } 

    get devTools() { 
    if (__DEBUG__) { 
     if (__DEBUG_NEW_WINDOW__) { 
     if (!window.devToolsExtension) { 
      require('../redux/utils/createDevToolsWindow').default(this.props.store); 
     } else { 
      window.devToolsExtension.open(); 
     } 
     } else if (!window.devToolsExtension) { 
     const DevTools = require('containers/DevTools').default; 
     return <DevTools />; 
     } 
    } 
    } 

    render() { 
    const styles = require('./../containers/Root.scss'); 
    return (
     <Provider store={this.props.store}> 
     <div> 
      <div className={styles.Root}> 
      <Link to='login'>login</Link> 
      <NavBar fixedTop> 
       <NavBar.Header> 
       <NavBar.Brand> 
        <IndexLink to='/' activeStyle={{color: '#33e0ff'}}> 
        <div className={styles.brand}></div> 
        <span>Hero Energy Solutions</span> 
        </IndexLink> 
       </NavBar.Brand> 
       <NavBar.Toggle /> 
       </NavBar.Header> 
       <NavBar.Collapse eventKey={0}> 
       <Nav navbar> 
        <LinkContainer to='/chat'> 
        <NavItem eventKey={1}>Chat</NavItem> 
        </LinkContainer> 
        <LinkContainer to='/widgets'> 
        <NavItem eventKey={2}>Widgets</NavItem> 
        </LinkContainer> 
        <LinkContainer to='/survey'> 
        <NavItem eventKey={3}>Survey</NavItem> 
        </LinkContainer> 
        <LinkContainer to='/about'> 
        <NavItem eventKey={4}>About Us</NavItem> 
        </LinkContainer> 
        <LinkContainer to='/'> 
        <NavItem eventKey={5}>Login</NavItem> 
        </LinkContainer> 
       </Nav> 
       </NavBar.Collapse> 
      </NavBar> 
      </div> 
      {this.content} 
      {this.devTools} 
     </div> 
     </Provider> 
    ); 
    } 
} 

Routes.js:

import React from 'react'; 
import { Route, IndexRoute } from 'react-router'; 
import CoreLayout from 'layouts/CoreLayout/CoreLayout'; 
import HomeView from 'views/HomeView/HomeView'; 
import LoginView from 'views/LoginView/LoginView'; 
import NotFoundView from 'views/NotFoundView/NotFoundView'; 
import RestrictedView from 'views/RestrictedView/RestrictedView'; 
import AboutView from 'views/AboutView/AboutView'; 

import { IndexLink, Link } from 'react-router'; 

import NavBar from 'react-bootstrap/lib/Navbar'; 
import Nav from 'react-bootstrap/lib/Nav'; 
import NavItem from 'react-bootstrap/lib/NavItem'; 
import LinkContainer from 'react-router-bootstrap/lib/LinkContainer'; 

import {UserAuthWrapper} from 'redux-auth-wrapper'; 
import {routerActions} from 'react-router-redux'; 

const CheckAuth = UserAuthWrapper({ 
    authSelector: (state) => state.user, // how to get the user state 
    redirectAction: routerActions.replace, // the redux action to dispatch for redirect 
    wrapperDisplayName: 'CheckAuth', // a nice name for the auth check 
    failureRedirectPath: 'login' // default anyway but meh! 
}); 
export default (store) => (
    <div> 
     <Route path='/' component={CoreLayout}> 
     <IndexRoute component={HomeView} /> 
     <Route path='login' component={LoginView} /> 
     <Route path='home' component={HomeView} /> 
     <Route path='about' component={AboutView} /> 
     <Route path='restricted' component={CheckAuth(RestrictedView)} /> 
     </Route> 
     <Route path='*' component={NotFoundView}/> 
    </div> 
); 

これは非常に助けになるかどうかはわかりませんが、リアクションコンソールでクライアント側のスクリーンショットがあります。

Screenshot of react dev console

答えて

4

申し訳ありませんが、誰も:のスクリーンショットは、DEVコンソールを反応させます!解決策は非常に簡単です。

CoreLayoutビューは、これらすべてのものがどこにあるかを示します。私の最大の問題は、反応ルータの仕組みを正しく理解できていないことでした。ここで私が理解しているのは、推論です。

ルート/は、/(基本的にすべての要求です)のすべての要求と一致します。しかし、それは他の反応成分を含む反応成分です!だから、CoreLayoutコンポーネントが返されますが、CoreLayoutの内容は...ホーム、について対応するビュー、すなわちある

編集:あなたはあなたの他のサブをしたいCoreLayoutビューで<div> {this.props.children} </div> を含める必要が レンダリングされるビュー(そうでなければレンダリングされません)。

関連する問題