标签: react-router

在访问时,react-router动态段崩溃

我有一个看起来像这样的路线配置(只显示我认为可能相关的部分):

var React = require('react');

var Router = require('react-router');
var { Route, DefaultRoute, NotFoundRoute } = Router;

var routes = (
    <Route handler={AppHandler}>
        <DefaultRoute handler={HomeHandler}/>
        <Route name='home' path='/home' handler={HomeHandler}/>
        <Route name='settings' path='/settings/?:tab?' handler={SettingsHandler}/>
        <NotFoundRoute handler={NotFoundHandler}/>
    </Route>
);

Router.run(routes, Router.HistoryLocation, function (Handler) {
    React.render(<Handler/>, document.getElementById('application'));
});
Run Code Online (Sandbox Code Playgroud)

现在,在我的Settings react文件中,我有以下内容:

var Settings = React.createClass({
    mixins: [Router.State],
  render: function() { ... }
});
Run Code Online (Sandbox Code Playgroud)

如果我访问host.local/settings和日志this.getParams()一切正常,文件呈现Object {tab: undefined}在控制台中显示我.但是一旦我尝试host.local/settings/user- 我希望控制台返回类似的东西Object {tab: 'user'}- 整个事情就会崩溃并开始投入Uncaught SyntaxError: Unexpected token …

reactjs react-router

38
推荐指数
2
解决办法
6290
查看次数

从通过React Router设置的路由访问Redux Store

我想利用react-router的onEnter处理程序来提示用户在进入受限路由时进行身份验证.

到目前为止,我的routes.js文件看起来像这样:

import React from 'react';
import { Route, IndexRoute } from 'react-router';

export default (
    <Route   path="/"         component={App}>
      <IndexRoute             component={Landing} />
      <Route path="learn"     component={Learn} />
      <Route path="about"     component={About} />
      <Route path="downloads" component={Downloads} onEnter={requireAuth} />
    </Route>
)
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望我的requireAuth函数是一个可以访问商店和当前状态的redux动作,就像这样:store.dispatch(requireAuth()).

不幸的是,我无法访问此文件中的商店.connect在这种情况下,我认为我不能真正使用它来访问我想要的相关操作.我也不能只import store从创建商店的文件中获取,因为在应用程序首次加载时这是未定义的.

javascript reactjs react-router redux

38
推荐指数
2
解决办法
1万
查看次数

react-router-dom v4中的多个嵌套路由

我需要在react-router-dom中使用多个嵌套路由

我正在使用react-router-dom的v4

我有我的

import { BrowserRouter as Router, Route } from 'react-router-dom';
Run Code Online (Sandbox Code Playgroud)

我需要像这样渲染组件

--- Login
--- Home
    --- Page 1
    --- Page 2
    --- Page 3
--- About
--- etc
Run Code Online (Sandbox Code Playgroud)

Home组件包含一个Header组件,该组件对于Page1,Page2和Page3组件是通用的,但在Login和About中不存在.

我的js代码就是这样读的

<Router>
    <div>
        <Route path='/login' component={Login} />
        <Home>
            <Route path='/page1' component={Page1} />
            <Route path='/page2' component={Page2} />
            <Route path='/page3' component={Page3} />
        </Home>
        <Route path='/about' component={About} />
    </div>
</Router>
Run Code Online (Sandbox Code Playgroud)

我希望Login组件只显示在/ login当我请求/ page1,/ page2,/ page3时,它们应该分别包含Home组件和该页面的内容.

我得到的是渲染的Login组件,并在下面呈现Page1的组件.

我很确定我错过了一些非常微不足道的事情,或者在某个地方犯了一个非常愚蠢的错误,并且非常感谢我能得到的所有帮助.过去两天我一直坚持这个.

javascript reactjs react-router react-router-dom

38
推荐指数
3
解决办法
4万
查看次数

当我使用<a>标签跟踪路线时,React-Router是刷新页面

我正在构建一个具有指向预定义路由的链接的React应用程序.

<a href="/my/react/route/">Click Here</a>
Run Code Online (Sandbox Code Playgroud)

路由解析正常,但它刷新了页面,从而降低了应用程序性能.如何避免重新渲染整个页面?

javascript reactjs react-router

37
推荐指数
2
解决办法
2万
查看次数

通过React-Router v4 <Link />传递道具

问题:如何通过React-Router的Link组件传递prop或单个值(如_id),并在端点捕获它?

这就是我的意思:假设我们在页面/ a上.链接将用户带到/ b.就这样<Link to='/b'>.现在,我需要通过链接传递_id,从/ a到/ b.

<Link to='/b' params={_id}>blah blah</Link>
Run Code Online (Sandbox Code Playgroud)

我想要传递的id是Link组件嵌套在其中的对象的属性.

params={}在另一个StackOverflow线程中找到了这种语法.我的代码编译没有破坏,所以这可能意味着它工作?但是,我不确定如何在端点处检索此传递的值.

任何帮助将不胜感激.

hyperlink reactjs react-router

37
推荐指数
4
解决办法
4万
查看次数

无法读取null的属性'getHostNode'

我有一个视觉/反应应用程序与反应路由器,我有一个简单的按钮在我的应用程序:

<Link className="dark button" to="/">Another Search</Link>
Run Code Online (Sandbox Code Playgroud)

当我点击它时,我得到以下异常:

Uncaught TypeError: Cannot read property 'getHostNode' of null
Run Code Online (Sandbox Code Playgroud)

错误来自:

getHostNode: function (internalInstance) {
    return internalInstance.getHostNode();
},
Run Code Online (Sandbox Code Playgroud)

知道为什么我得到这个?

javascript reactjs react-router

36
推荐指数
2
解决办法
4万
查看次数

在React Router上,如何保持登录状态甚至刷新页面?

我正在使用React和React Router与Redux建立网站.许多路由(页面)需要登录.如果用户未登录,我可以重定向到登录:

function requireAuth(nextState, replace) {
    let loggedIn = store.getState().AppReducer.UserReducer.loggedIn;

    if(!loggedIn) {
        replace({
            pathname: '/login',
            state: {
                nextpathname: nextState.location.pathname
            }
        });
    }
}

ReactDOM.render(
    <Provider store={store}>
        <Router history={history}>
            <Route path="/" component={App}>
                <IndexRoute component={Index} />
                <Route path="login" component={Login} />
                <Route path="register" component={Register} />
                <Route path="dashboard" component={Graph} onEnter={requireAuth}>
                    ... some other route requires logged in ...
                </Route>
            </Route>
        </Router>
    </Provider>,
    document.getElementById('entry')
);
Run Code Online (Sandbox Code Playgroud)

如果用户没有登录,请查看代码,我使用onEnter挂钩重定向到'/ login'路由.用于检查用户登录的数据是在商店中,并且在用户登录后它将更新.

它工作得很好,但问题是当我刷新页面时,存储将被重置并且用户没有登录状态.

我知道这是因为Redux存储只是内存存储,所以refesh页面会丢失所有数据.

检查服务器会话每次刷新都可以工作,但这可能是太多的请求,所以这看起来不错.

将登录状态数据保存到localStorage可能有效,但在这种情况下,我应该检查每个AJAX调用失败该请求被拒绝,因为会话已过期或不存在像某些东西,这看起来也是个坏主意.

有没有办法更清楚地解决这个问题?我的网站将会使用很多人,所以我希望尽可能减少XHR呼叫.

任何建议将非常感谢.

javascript local-storage reactjs react-router react-redux

36
推荐指数
1
解决办法
3万
查看次数

如何使用react-route Link刷新页面

我正在尝试使用react-route Link刷新页面.但是我实现它的方式又向后退了一步.(例如,如果URL是../client/home/register,当我按下重新加载时转到../client/home)

下面是我的代码

const AppErrorPage = () => (
    <div>
    <div style={ styles.container }>
        <h2>Error</h2>
        <p> Something went wrong, please reload the page </p>
        <div>
         <Link to="" refresh="true">
            <span>Reload</span>
          </Link>
        </div>
    </div>
    </div>  
);
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-router

36
推荐指数
5
解决办法
9万
查看次数

React Router v4具有多种布局

我想在我的公共布局中渲染我的一些路线,以及我的私人布局中的其他一些路线,是否有一个干净的方法来做到这一点?

示例显然不起作用,但我希望大致解释我正在寻找的内容:

<Router>

  <PublicLayout>
    <Switch>
      <Route exact path="/" component={HomePage} />
      <Route exact path="/about" component={AboutPage} />
    </Switch>
  </PublicLayout>

  <PrivateLayout>
    <Switch>
      <Route exact path="/profile" component={ProfilePage} />
      <Route exact path="/dashboard" component={DashboardPage} />
    </Switch>
  </PrivateLayout>

</Router>
Run Code Online (Sandbox Code Playgroud)

我想要切换某些路由的布局,如何使用新的路由器做到这一点?

嵌套路由不再有效,并给我这个错误:

You should not use <Route component> and <Route children> in the same route; <Route children> will be ignored
Run Code Online (Sandbox Code Playgroud)

编辑:布局包装整个路径组也意味着只要您保留在同一个私有/公共路由组中,这些布局只会呈现一次.如果您的布局必须从您的服务器获取某些内容,这是一个大问题,因为如果您使用布局包装每个页面,那么每次更改都会发生这种情况.

reactjs react-router

35
推荐指数
6
解决办法
1万
查看次数

React路由器私有路由/重定向无法正常工作

我稍微调整了React Router示例,让私有路由与Redux一起玩得很好,但在链接或重定向到其他"页面"时没有呈现任何组件.这个例子可以在这里找到:

https://reacttraining.com/react-router/web/example/auth-workflow

他们的PrivateRoute组件如下所示:

const PrivateRoute = ({ component: Component, ...rest }) => (
  <Route {...rest} render={props => (
    fakeAuth.isAuthenticated ? (
      <Component {...props}/>
    ) : (
      <Redirect to={{
        pathname: '/login',
        state: { from: props.location }
      }}/>
    )
  )}/>
)
Run Code Online (Sandbox Code Playgroud)

但是,因为我已将它合并到Redux应用程序中,所以我不得不稍微调整一下PrivateRoute,以便我可以访问redux存储以及路径Props:

const PrivateRouteComponent = (props) => (
    <Route {...props.routeProps} render={() => (
    props.logged_in ? (
        <div>{props.children}</div>
        ) : (
        <Redirect to={{
            pathname: '/login',
            state: { from: props.location }
        }} /> )
    )} />
);

const mapStateToProps = (state, ownProps) => …
Run Code Online (Sandbox Code Playgroud)

reactjs react-router redux react-redux

35
推荐指数
4
解决办法
3万
查看次数