【发布时间】:2017-12-05 14:33:14
【问题描述】:
我是 reactjs 的新手,我正在一步一步地学习。我遇到了一个问题,那就是当我尝试访问道具中的位置参数时,它返回给我undefined。我试图找到解决方案,但大多数人都写过我必须在路由器中添加我的组件,但我将它包装在路由器中,但我仍然无法访问位置参数
export const abcdContainer = withRouter(connect(
mapStateToProps,
mapDispatchToProps
)(abcd));
我正在尝试访问 and 组件中的位置参数,但问题是其中没有位置参数。谁能告诉我这是怎么回事
如果有人知道出了什么问题,请告诉我我已经花了半天时间,但我无法弄清楚
使用 URL 添加的代码和版本
路由器版本 => 2.8.1
网址:http://localhost:3000/somePage?someParam=cm9oYW5qYWxpbHRlYWNoZXJAZ21haWwuY29t
abcdContainer.js
const mapStateToProps = (state, ownProps) => {
// some code over here
}
const mapDispatchToProps = (dispatch, ownProps) => {
// some code over here
};
export const abcdContainer = withRouter(connect(
mapStateToProps,
mapDispatchToProps
)(abcd));
abcd.jsx
class abcd extends Component {
constructor(props, context) {
super(props, context);
this.state = {
// setting state over here
};
}
abcdFunction(){
if (this.props.location.query.someParam !== undefined){ // trying to extract someParam value from location
// some code over here
}
}
render() {
// some code over here
}
}
export default CSSModules(abcd, styles, { allowMultiple: true });
这是流程。路由器重定向到容器,然后容器重定向到真正的组件
Route.js
export const Routes = ({ store }) => (
<Provider store={store}>
<Router history={browserHistory}>
<Route path="/" component={aContainer}>
<IndexRoute component={IContainer} />
// some routes
<Route path="/openAbcd" component={() => (<abcdContainer caller="aaaaaaa" />)} />
// some routes
</Route>
// some routes
</Router>
</Provider>
);
Routes.propTypes = {
store: React.PropTypes.object.isRequired,
};
【问题讨论】:
-
你必须提供一个更完整的例子,否则很难说。发布一个最小但完整的代码示例,包括组件。你使用的是哪个版本的 react-router?
-
@trixn 我已经添加了代码和版本
-
您希望位置对象是窗口中的对象还是命名相似?无论如何,它不在道具中,因为没有父组件将其传递给子组件。
-
@trixn 我在某处读到,当我们将其放入
withRouter时,位置会自动引入我们的道具中 -
请记住,该位置仅传递给您已设置为路由器的组件!并且不是嵌套传递,因此如果您想要内部组件中的位置,则必须将其作为道具传递
标签: javascript reactjs react-router