我正在尝试使用 1.0.0-rc1 react-router 和 history 2.0.0-rc1 在按下按钮后手动浏览网站。不幸的是,按下按钮后,我得到:
无法读取未定义的属性“pushState”
我的路由器代码:
import React from 'react';
import { Router, Route, Link, browserHistory } from 'react-router'
import AppContainer from './components/AppContainer.jsx';
import MyTab from './components/test/MyTab.jsx';
import MainTab from './components/test/MainTab.jsx';
var routes = (
<Route component={AppContainer} >
<Route name="maintab" path="/" component={MainTab} />
<Route name="mytab" path="/mytab" component={MyTab} />
</Route>
);
React.render(<Router history={browserHistory}>{routes}</Router>, document.getElementById('main'));
导航按钮位于 MyTab 上,它尝试导航到 MainTab:
import React from 'react';
import 'datejs';
import History from "history";
export default React.createClass({
mixins: [ History ],
onChange(state) {
this.setState(state);
},
handleClick() {
this.history.pushState(null, `/`)
},
render() {
return (
<div className='container-fluid' >
<button type="button" onClick={this.handleClick.bind(this)}>TEST</button>
</div>
);
}
});
当我使用历史时this.props.history
一切正常。这段代码有什么问题?
编辑。
添加以下内容后:
const history = createBrowserHistory();
React.render(<Router history={history}>{routes}</Router>, document.getElementById('main'));
我尝试访问我的应用程序。之前(没有 history={history}),我刚刚访问localhost:8080/testapp
并且一切正常 - 我的静态资源生成到dist/testapp
目录中。现在在这个 URL 下,我得到:
位置“/testapp/”没有匹配任何资源
我尝试通过以下方式使用 useBasename 函数:
import { useBasename } from 'history'
const history = useBasename(createBrowserHistory)({
basename: '/testapp'
});
React.render(<Router history={history}>{routes}</Router>, document.getElementById('main'));
应用程序又回来了,但我再次收到错误
无法读取未定义的属性“pushState”
在通话中:
handleClick() { this.history.pushState(null, `/mytab`) },
我认为这可能是因为我在 gulp 中的连接任务,所以我在配置中添加了 history-api-fallback:
settings: {
root: './dist/',
host: 'localhost',
port: 8080,
livereload: {
port: 35929
},
middleware: function(connect, opt){
return [historyApiFallback({})];
}
}
但是在添加中间件后,我访问网站后得到的只是:
不能获取 /