Ich bin neu in der React-Redux-Ökosystem, Lernen durch einfaches Ausprobieren von Anwendungen. In diesem Fall probiere ich aus, wie Routing in der react-redux-Anwendung funktioniert. Grundsätzlich ist die Idee:Routing-Probleme in React-Redux
- Navigieren Sie zu einer neuen Seite durch Klicken auf einen Link (a reagiert-Router Komponente)
- Navigieren Sie zu einer neuen Seite nach dem erfolgreichen Abschluss der abgefertigten Asynchron-Aktion.
Hier ist mein Code
import React from 'react'
import {Link} from 'react-router'
import {routerActions} from 'react-router-redux'
import {connect} from 'react-redux'
class App extends React.Component {
render() {
// And you have access to the selected fields of the State too!
return (
<div>
<header>
Links:
{' '}
<Link to="/">Home</Link>
{' '}
<Link to="/foo">Foo</Link>
{' '}
<Link to="/bar">Bar</Link>
</header>
<div>
<button onClick={() => routerActions.push('/foo')}>Go to /foo</button>
</div>
</div>
)
}
}
export default connect(null, null)(App);
===================================================================
import React from 'react'
import {connect} from 'react-redux'
class Foo extends React.Component {
render() {
return (
<div> <h1>I'm Foo</h1> </div>
)
}
}
export default connect(null, null)(Foo);
===================================================================
import React from 'react'
import {connect} from 'react-redux'
class Bar extends React.Component {
render() {
return (
<div> <h1>I'm bar</h1> </div>
)
}
}
export default connect(null, null)(Bar);
===================================================================
import React from 'react'
import ReactDOM from 'react-dom'
import {Provider} from 'react-redux'
import {Router, Route, browserHistory} from 'react-router'
import {syncHistoryWithStore} from 'react-router-redux'
import configureStore from './store'
import App from './components/test/App';
import Bar from './components/test/Bar';
import Foo from './components/test/Foo';
// Get the store with integrated routing middleware.
const store = configureStore()
// Sync browser history with the store.
const history = syncHistoryWithStore(browserHistory, store)
// And use the prepared history in your Router
ReactDOM.render(
<Provider store={store}>
<div>
<Router history={history}>
<Route path="/" component={App}>
<Route path="/foo" component={Foo}/>
<Route path="/bar" component={Bar}/>
</Route>
</Router>
</div>
</Provider>,
document.getElementById('root')
===================================================================
import {combineReducers,createStore, applyMiddleware} from 'redux'
import thunk from 'redux-thunk'
import createLogger from 'redux-logger'
import userReducer from './reducers/reducer-user';
import {routerMiddleware,routerReducer} from 'react-router-redux'
import {browserHistory} from 'react-router'
export default function configureStore() {
// Create the routing middleware applying it history
const browserMiddleware = routerMiddleware(browserHistory);
const logger = createLogger();
const reducer = combineReducers({
userState: userReducer,
routing: routerReducer
})
const store = createStore(reducer,applyMiddleware(thunk,browserMiddleware,logger));
return store;
}
Die Anwendung baut fein und es kommt gut, aber wenn ich auf den Link klicken, funktioniert es nicht.
Siehe screen shot of the running application
Gesucht und lesen Sie verschiedene Beiträge, aber ich konnte das Grundproblem nicht lokalisieren.
Ich denke, dass dies ein Duplikat sein kann von: http://StackOverflow.com/Questions/35196873/How-To-use-React-Router-Redux-Routeactions/37494808 - im Wesentlichen sieht es so aus, als ob Sie verwenden müssen 'this.props.dispatch (routeActions.push ('/ foo));' –