react-router
是 React 应用中用于实现路由管理的库。this.props.history.push
是 react-router
提供的一个方法,用于导航到不同的路由。
this.props.history.push(…)
不工作的原因可能有以下几种:
withRouter
高阶组件包裹的,或者使用 Route
组件的 render
属性。history.push
失效。this
可能指向不正确。import { withRouter } from 'react-router-dom';
class MyComponent extends React.Component {
handleClick = () => {
this.props.history.push('/new-route');
};
render() {
return (
<button onClick={this.handleClick}>Go to New Route</button>
);
}
}
export default withRouter(MyComponent);
或者使用 Route
的 render
属性:
<Route path="/my-route" render={(props) => <MyComponent {...props} />} />
确保在数据获取完成后调用 history.push
:
class MyComponent extends React.Component {
state = {
data: null,
};
componentDidMount() {
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
this.setState({ data });
this.props.history.push('/new-route');
});
}
render() {
return (
<div>
{this.state.data ? 'Data loaded' : 'Loading...'}
</div>
);
}
}
this
指向正确使用箭头函数确保 this
指向组件实例:
class MyComponent extends React.Component {
handleClick = () => {
this.props.history.push('/new-route');
};
render() {
return (
<button onClick={this.handleClick}>Go to New Route</button>
);
}
}
通过以上方法,你应该能够解决 this.props.history.push(…)
不工作的问题。
领取专属 10元无门槛券
手把手带您无忧上云