私はルートとして機能する2つのボタンを持っています。ルートが変更されるたびに、アクティブなボタンが変更されていることを確認したい。反応ルータv4のルート変更を聞くにはどうすればよいですか?
反応ルータv4のルート変更を聞く方法はありますか?
私はルートとして機能する2つのボタンを持っています。ルートが変更されるたびに、アクティブなボタンが変更されていることを確認したい。反応ルータv4のルート変更を聞くにはどうすればよいですか?
反応ルータv4のルート変更を聞く方法はありますか?
location
小道具を得るにはwithRouter
を使用します。コンポーネントが原因で、新しいルートで更新されると値が変更された場合、私がチェック:
@withRouter
class App extends React.Component {
static propTypes = {
location: React.PropTypes.object.isRequired
}
// ...
componentDidUpdate(prevProps) {
if (this.props.location !== prevProps.location) {
this.onRouteChanged();
}
}
onRouteChanged() {
console.log("ROUTE CHANGED");
}
// ...
render(){
return <Switch>
<Route path="/" exact component={HomePage} />
<Route path="/checkout" component={CheckoutPage} />
<Route path="/success" component={SuccessPage} />
// ...
<Route component={NotFound} />
</Switch>
}
}
はそれが
history v4 libを使用する必要があります。上記に拡大することthere
history.listen((location, action) => {
console.log(`The current URL is ${location.pathname}${location.search}${location.hash}`)
console.log(`The last navigation action was ${action}`)
})
history.pushStateを(ホープ)とhistory.replaceState()呼び出しがpopstateをトリガしません。これだけではすべてのルート変更がカバーされるわけではありません。 – Ryan
から
例には、履歴オブジェクトで取得する必要があります。 BrowserRouter
を使用している場合は、withRouter
をインポートし、コンポーネントをHoCでラップして、ヒストリオブジェクトのプロパティと関数に小道具を介してアクセスすることができます。
import { withRouter } from 'react-router-dom';
const myComponent = ({ listen }) => {
listen((location, action) => {
// location is an object like window.location
console.log(action, location.pathname, location.state)
});
return <div>...</div>;
};
export default withRouter(myComponent);
注意すべき唯一のものはwithRoutesとhistory
アクセスするには、他のほとんどの方法はそれに彼らド・構造などのオブジェクトを小道具を汚染するように見えるということです。
答えは質問に関係なく何かを理解するのを助けました:)。しかし 'withRoutes'を' withRouter'に修正してください。 –
申し訳ありませんが、それを指摘していただきありがとうございます。私はその投稿を修正した。質問の先頭に正しいインポートを入れて、コード例で誤って入力しました。 –
[現在のバージョンのwithRouter](https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/withRouter.md)は、変数 'listen'。 – mikebridge
反応ルータv4で 'this.props.location.pathname'を使用します。 – ptorsson