【发布时间】:2023-03-25 09:57:01
【问题描述】:
我正在使用 react 和 react 路由器。我的一些组件定义了子路由,因此我想向它们传递一个回调,以便返回到特定的路由/组件。我想避免将字符串传递给特定路由(因为代码中发生路由更改时的依赖关系)。所以我更喜欢传递一个回调并用 match.url 的值填充它。
但这不起作用:match.url 总是引用当前路由,而不是传递值。
父组件(简化):
export class ParentComponent extends React.Component {
render() {
const { history, match, contentId } = this.props;
return (
<div>
<div>
<div>Block 1</div>
<div>Block 2</div>
<div>Block 3</div>
</div>
{contentId && <MyChildComponent content={contentId} goBack={() => history.push(match.url)} />}
</div>
);
}
}
我的子组件(简化):
export class MyChildComponent extends React.PureComponent {
render() {
return (
(
<React.Fragment>
<div role="dialog" onClick={this.props.goBack} />
</React.Fragment>),
);
}
}
我的路由器:
const Routes = () => (
<Router history={createBrowserHistory()}>
<div>
<Route path="/result/:contentId?" component={ParentComponent} />
</div>
</Router>
);
所以当我转到 /result 时,我看到 - 正如预期的那样 - 除了子组件之外的所有内容。导航到 /result/someId 时,我看到了子组件,但 goBack 仅引用当前页面而不是上一页。
【问题讨论】:
标签: javascript reactjs callback react-router