【问题标题】:Link to new tab in reactjs链接到 reactjs 中的新选项卡
【发布时间】:2016-12-26 07:03:29
【问题描述】:

我尝试使用 React 路由器中的链接在新选项卡中打开一个组件,它打开了一个 404 not found 而不是 react 组件,

React 入口点 js,

import React from 'react';
import { render } from 'react-dom';
import { Route,Router, browserHistory} from 'react-router';
import Home from './components/Home';
import About from './components/About';

render((
    <Router history={browserHistory}>
        <Route path="/Home" component={Home}></Route>
        <Route path="/about" component={About}></Route>
    </Router>

), document.getElementById('reactDiv'));

主页组件,

import React from 'react';

export default class Home extends React.Component {
  constructor(props) {
    super(props);
  }

  render() {
    return (
      <div>
            <h2> Home Page </h2>
            <Link to={`/about`} target="_blank"> 
                About
            </Link>
      </div>
    );
  }
}

关于组件

import React from 'react';

export default class About extends React.Component {
  constructor(props) {
    super(props);
  }

  render() {
    return (
      <div>
            <h2> About Page </h2>
      </div>
    );
  }
}

我希望 About 组件会显示在新标签中,但它会打开一个新标签并出现 404 page not found 错误。

谁能告诉我如何在新标签页中打开组件。

【问题讨论】:

  • 你必须将 `historyApiFallback' 设置为 true
  • 我没有使用 webpack 开发服务器,那么如何设置这个 historyApiFallback 选项??
  • 确保在服务器(任何)上,当服务器上没有路由匹配时,您提供包含 react 生成的 .js 文件的 html 文件。
  • 您需要在 Home 组件中使用 this.props.children。

标签: reactjs react-router


【解决方案1】:

我怀疑 Webpack 没有“授权”处理您当前服务器上的所有路由请求。

如果您使用的是express,那么在您的server.js 中,请确保您的路线定义为:

app.get('*', function(req, res) {
  res.sendFile(path.join( __dirname, 'path/to/index.html'));
});

* 通配符告诉 express 在每个路由请求上呈现您的 index.html

我建议的另一个修改是从路由定义中删除前面的斜杠。试试吧:

我尝试使用 React 路由器中的链接在新选项卡中打开一个组件,它打开了一个 404 not found 而不是 react 组件,

  <Route path="Home" component={Home}></Route>
  <Route path="about" component={About}></Route>

过去,我在使用 react-router 绝对定义路径时遇到了一些问题。

【讨论】:

  • 正如你所说,我在 server.js 中使用 express,并且路由是用''定义的,但即使那样它也不起作用,app.use(express.static('./public ')); app.get('', function (request, response){ response.sendFile(path.join(__dirname, 'public', 'index.html')); }); app.listen(8081);
  • 您可以尝试从路由定义中删除前面的斜杠吗?
【解决方案2】:

你的路由器应该是这样的:

<Router history={browserHistory}>
    <Route path="/" component={App}>
         <IndexRoute component={Home}/>
         <Route path="about" component={About} />
    </Route>
</Router>

那么你的应用应该是这样的:

import React from 'react';

class App extends React.Component {
    render() {
        return (
            {this.props.children}
        );
    }
}


export default App;

这应该可以解决问题。

更新

你的链接应该是&lt;Link to="about"&gt;About &lt;/Link&gt;

【讨论】:

  • 感谢您的回复,它没有帮助我,我仍然有同样的问题,我正在使用 maven 运行项目,它会导致任何问题吗?
  • 您还应该更改您的链接。我更新了答案。
  • 我按照你说的试过了,当我使用 express Link To 运行前端时,效果很好,当我尝试使用 mvn spring boot 运行时,它不起作用。
猜你喜欢
  • 2021-09-21
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
  • 2014-03-07
相关资源
最近更新 更多