在使用React Router v5和Redux时,将道具(props)传递给组件可以通过几种不同的方法来实现。以下是一些基础概念和相关解决方案:
withRouter
高阶组件import { withRouter } from 'react-router-dom';
import { connect } from 'react-redux';
class MyComponent extends React.Component {
// ...
}
const mapStateToProps = (state) => ({
// 从Redux获取状态
});
const mapDispatchToProps = {
// 映射dispatch到props的方法
};
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(MyComponent));
useHistory
, useLocation
, useParams
钩子import { useSelector, useDispatch } from 'react-redux';
import { useHistory, useLocation, useParams } from 'react-router-dom';
function MyComponent() {
const history = useHistory();
const location = useLocation();
const params = useParams();
const someState = useSelector(state => state.someReducer);
// 使用history, location, params和someState
}
Route
组件的render
属性传递额外的propsimport { Route } from 'react-router-dom';
import { connect } from 'react-redux';
const MyComponent = ({ someState, someAction }) => {
// ...
};
const mapStateToProps = (state) => ({
someState: state.someReducer,
});
const mapDispatchToProps = {
someAction,
};
<Route path="/my-path" render={(routeProps) => (
<MyComponent {...routeProps} {...connect(mapStateToProps, mapDispatchToProps)} />
)} />
如果你遇到无法传递props的问题,可能的原因包括:
withRouter
, connect
, useHistory
, useLocation
, useParams
等。mapStateToProps
是否正确地将Redux状态映射到了组件的props。export default
导出了包装后的组件。解决方法:
console.log
打印出传递给组件的props,以确认它们是否正确。通过上述方法,你应该能够解决在使用React Router v5和Redux时遇到的props传递问题。
领取专属 10元无门槛券
手把手带您无忧上云