reactjs – React-router 2.0:以编程方式更改路由(URL未更新)
我在使用react-router 2.0进行编程路由时遇到了一些麻烦
文档说要使用 this.context.router.push('/test'); 这是正确导航,但是我的浏览器上的URL保持不变,即使来自其他页面(/ test)的组件已呈现并且路由更改成功,也不会更新. 如何获取要更新的URL?
this.props.history.push( ‘/一些/路径’);已被弃用.
我们现在应该使用以下内容: import { browserHistory } from 'react-router' 然后,无论您想要导航到哪里 – 代码中的某个位置 – 都可以: browserHistory.push('/some/path'); 这是我配置处理我的路由机制的routes.jsx文件的方法: //Require react. import React from "react"; //Require routing variables. import { Router,Route,IndexRoute,browserHistory } from "react-router"; //Example components. import MainComponent from "../containers/main.js"; import HomeComponent from "../containers/home.js"; var Routes = ( <Router history={browserHistory}> <Route path="/" component={MainComponent}> <IndexRoute component={HomeComponent} /> <Route path="/example" component={ExampleComponent} /> </Route> </Router> ); module.exports = Routes; 我正在使用webpack.在webpack中,我也有: ... bla ... bla... bla ... module: { },devServer: { historyApiFallback: true },plugins: [ ] ... bla ... bla... bla ... 2018年1月4日更新: [免责声明:我现在使用的是TypeScript而不是ES6] 这就是我现在用反应^ 15.6.1& react-dom ^ 15.6.1 index.tsx import * as React from "react"; import * as ReactDOM from "react-dom"; import Routes from "./configuration/routes"; ReactDOM.render( Routes,document.getElementById("app") ); routes.tsx import * as React from "react"; import { BrowserRouter,HashRouter } from 'react-router-dom'; import App from "../containers/App"; let Routes: any = ( // <BrowserRouter> // <App someDefaultValue/> // </BrowserRouter> // HashRouter adds the # in front of our paths :) - check the browser's URL to see. <HashRouter> <App someDefaultValue/> </HashRouter> ); export default Routes; App.tsx import * as React from "react"; import { Switch,Route } from 'react-router-dom' import Header from "../components/header-component/header"; import Main from "../components/main-component/main"; import Footer from "../components/footer-component/footer"; interface IComponentProps { someDefaultValue: boolean; } interface IComponentState { loading: boolean; } class App extends React.Component<IComponentProps,IComponentState> { constructor() { super(); this.state = { loading: true }; } render() { const { loading } = this.state; if(loading) { //Render something or something else.. } return ( <div className="app-container"> <Switch> <Route path='/' component={Header}/> </Switch> <Switch> <Route path='/' component={Main}/> </Switch> <Switch> <Route path='/' component={Footer}/> </Switch> </div> ); } } export default App; 然后你可以使用这样的东西在点击(或任何……)时在菜单项上放置导航 import * as React from "react"; import { Link } from 'react-router-dom' class Menu extends React.Component { render() { return ( <div> <Link to='/home'> <div>Home</div> </Link> <Link to='/about'> <div>About</div> </Link> </div>); } } export default Menu; 要“以编程方式”导航: this.props.history.push('/wherever'); 我使用HashRouter的原因是因为我注意到BrowserRouter在人们保存“书签”等时它会中断.HashRouter允许我的用户无缝浏览我的网站:) 如果我需要展示BrowserRouter如何工作,我可以 – 只是问 – 它几乎相同 – 但你会发现它只在你在网站内导航时表现.当您从外部导航时,就是错误开始发生的时候. 哦,是的,差点忘了 – 我没有真正测试过这个,但我认为我们仍然需要 devServer: { historyApiFallback: true } 在我们的webpack.config.js中?不知道:))但是我现在在那里…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |