reactjs - React 路由器不与 Redux 一起工作,不接收道具
问题描述
我正在尝试将 react router v4 与 redux 连接,但它不起作用。我withRouter
按照文档中的描述使用,但我的路由组件中没有道具。任何想法?
这是我的代码:
index.js
import React from 'react';
import { render } from 'react-dom';
import { BrowserRouter as Router } from 'react-router-dom';
import { createStore, applyMiddleware } from 'redux';
import { Provider } from 'react-redux';
import { routerMiddleware } from 'react-router-redux';
import { createLogger } from 'redux-logger';
import thunk from 'redux-thunk';
import createHistory from 'history/createBrowserHistory';
const history = createHistory();
const logger = createLogger();
const middleware = [
thunk,
routerMiddleware(history)
];
if (process.env.NODE_ENV === 'development') {
middleware.push(logger);
}
// create store
const store = createStore(
reducers,
applyMiddleware(...middleware)
);
render(
<Provider store={store}>
<Router>
<App />
</Router>
</Provider>,
document.getElementById('root')
);
应用程序.js
import React, { Component } from 'react';
import { Switch, Route, Link, withRouter } from 'react-router-dom';
import { connect } from 'react-redux';
class App extends Component {
componentDidMount() {
this.props.fetchPages(API_PAGES);
this.props.fetchPosts(API_POSTS);
}
render() {
return (
!this.props.pages.isFetching ?
<div>
<ul>
{this.props.pages.data && this.props.pages.data.map(page => (
<li key={page.id}>
<Link to={page.slug}>{page.title.rendered}</Link>
</li>
))}
</ul>
<Switch location={this.props.location}>
<Route path={routes.HOME} exact component={Home} />
<Route path={routes.ABOUT} component={About} />
<Route path={routes.CONTACT} component={Contact} />
<Route path={routes.NEWS} component={News} />
<Route component={NotFound} />
</Switch>
</div> :
<p>Loading...</p>
);
}
}
function mapStateToProps(state) {
return state;
}
export default withRouter(connect(
mapStateToProps,
{ ...actions }
)(App));
减速器/index.js
import { combineReducers } from 'redux';
import { routerReducer } from 'react-router-redux';
export default combineReducers({
pages,
posts,
routing: routerReducer
});
组件/Home.js
import React from 'react';
const Home = (props) => {
console.log('home', props);
return (
<div>
This is the home page.
</div>
);
};
export default Home;
解决方案
You should pass the props to home component like this to make it available there,
<Route path={routes.HOME} exact component={(props)=><Home {...props} newProps={value you want to pass}/> }/>
推荐阅读
- matlab - 自变量具有不同权重时的加权拟合(非线性)
- node.js - 为什么我无法连接到 localhost (nodejs)?
- php - $_FILES['formfield']['tmp_name'] 总是安全的吗?
- asp.net - 我无法反序列化 JSON 对象,它返回 null
- ruby-on-rails-5 - Rails form_for 与 cypress,给出 CSRF 错误
- python - 循环遍历多个文件夹以清除每个文件夹中的项目
- javascript - Vue 将事件从父级发送到子级
- python - matplotlib 测试无头且没有警告
- javascript - CSS 样式不适用于 NEXT.js 中具有 amp-bind 的动态类
- swift - 每当我构建我的项目时,Xcode 总是编译 CocoaPods 库。(编译时间长)