最近、React / Redux の学習を開始しました。現在、小さな単一ページのアプリケーションを構築しようとしています。
最近、理解できず、修正できない問題に遭遇しました。
コードをお見せしましょう:
index.js
import React from 'react'
import ReactDOM from 'react-dom'
import { createStore, combineReducers } from 'redux'
import { Provider } from 'react-redux'
import { Router, Route, IndexRoute, hashHistory } from 'react-router'
import { syncHistoryWithStore, routerReducer } from 'react-router-redux'
import App from './components/App'
import Home from './components/Home'
import About from './components/About'
const reducer = (state = {}, action) => {
return state
}
const store = createStore(
combineReducers({
reducer,
routing: routerReducer
})
)
const history = syncHistoryWithStore(hashHistory, store)
ReactDOM.render((
<Provider store={store}>
<Router history={history}>
<Route path='/' component={App}>
<IndexRoute component={Home}/>
<Route path='about' component={About}/>
</Route>
</Router>
</Provider>
), document.getElementById('root'))
基本的にこれは、react-router-redux GitHub ページ (セクションTutorialまでスクロール) の例です。唯一の違いは、hashHistoryを使用していることです。
App.js
import React, { Component, PropTypes } from 'react'
import Navigation from './Navigation'
export default class App extends Component {
render() {
return (
<div>
<Navigation/>
{this.props.children}
</div>
)
}
}
App.propTypes = {
children: PropTypes.node
}
ナビゲーション.js
import React, { Component } from 'react'
import { Link, IndexLink } from 'react-router'
export default class Navigation extends Component {
render() {
return (
<ul role='nav'>
<li><IndexLink to='/' activeStyle={{ color: 'red' }}>Home</IndexLink></li>
<li><Link to='/about' activeStyle={{ color: 'red' }}>About</Link></li>
</ul>
)
}
}
Home および About コンポーネントは、SPA の状態を視覚化するために <h1> 見出しをレンダリングするだけです。
これまでのところ、すべてが期待どおりにうまく機能しています。ユーザーがAboutリンクをクリックすると、それに応じて URL が変更され、リンクが赤くなります (activeStyle プロパティのため)。
しかし、ここで私の問題が発生します(これをまだ読んでくれてありがとう):
<Navigation> コンポーネントをreact-redux connect()経由でラップしたいと考えています。だから、これは私の新しいバージョンです
ナビゲーション.js
import React, { Component } from 'react'
import { connect } from 'react-redux'
import { Link, IndexLink } from 'react-router'
class Navigation extends Component {
render() {
return (
<ul role='nav'>
<li><IndexLink to='/' activeStyle={{ color: 'red' }}>Home</IndexLink></li>
<li><Link to='/about' activeStyle={{ color: 'red' }}>About</Link></li>
</ul>
)
}
}
const NavigationContainer = connect()(Navigation)
export default NavigationContainer
しかし、現在、activeStyle 機能が壊れているようです... アプリをナビゲートすると、現在アクティブなリンクの色が変わりません。
私は本当にこの問題を何時間も解決しようとしました:(どんな助けも大歓迎です!