标签: react-router

通过反应路由器中的链路传递对象

是否可以通过Linkreact-router中的组件传递对象?

就像是:
<Link to='home' params={{myObj: obj}}> Click </Link>

以同样的方式,我会通过propsParentChild组件.

如果不可能实现这一目标的最佳方式是什么:
我有一个React + Flux应用程序,我用一些数据渲染表格.我想要做的是当我点击其中一行时,它将带我到这一行的一些细节组件.这行包含了我需要的所有数据,所以我认为如果我能通过它就会很棒Link.

另一个选项是传递idurl中的行,在详细信息组件中读取它,并通过ID从商店请求数据.

不确定实现上述目标的最佳方法是什么......

reactjs reactjs-flux react-router

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

React router和this.props.children - 如何将状态传递给this.props.children

我是第一次使用React-router而且我还不知道怎么想.这是我如何在嵌套路线中加载我的组件.

入口点.js

ReactDOM.render(
    <Router history={hashHistory} >
        <Route path="/" component={App}>
            <Route path="models" component={Content}>
        </Route>
    </Router>, 
    document.getElementById('app')
);
Run Code Online (Sandbox Code Playgroud)

App.js

  render: function() {
    return (
      <div>
        <Header />
        {this.props.children}
      </div>
    );
  }
Run Code Online (Sandbox Code Playgroud)

因此,我的应用程序的子项是我发送的内容组件.我正在使用Flux,我的App.js具有状态并侦听更改,但我不知道如何将该状态传递给this.props.children .在使用react-router之前,我的App.js明确地定义了所有子节点,因此传递状态是自然的,但我现在看不到如何做到这一点.

reactjs react-router

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

未捕获的TypeError:无法读取未定义的属性'push'(React-Router-Dom)

我有一个带旋转幻灯片的仪表板,每个幻灯片在Bldgs中都有一个相应的标签.两者Dashboard.jsBldgs.js有孩子我App.js.

当用户点击特定幻灯片ADashboard.js,Dashboard需要告知App.js以便在路由到时App可以告诉显示Bldgs.js标签.ABldgs

相信,我传递正确的索引值从Dashboard最高App和向下Bldgs.但是,我的App.js文件中引发了一个错误:

Uncaught TypeError: Cannot read property 'push' of undefined

在我开始将handleClick()函数传递给Dashboard组件之前,我的代码工作正常.

Index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import './index.css';
import injectTapEventPlugin from 'react-tap-event-plugin';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import { BrowserRouter as Router } from …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-router react-router-dom

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

如何在React应用程序中更新document.title?

由于React没有任何内置的管理方法document.title,我曾经在componentDidMount路由处理程序中设置它.

但是现在我需要根据state异步提取修改标题.我开始投入分配componentDidUpdate,但我时不时地忘记将document.title作业放到某些页面中,之前的标题一直存在,直到我终于注意到它为止.

理想情况下,我想要一种以document.title声明方式表达的方式,而不必分配它.鉴于我希望能够在几个嵌套级别指定文档标题,某种"假"组件可能是最方便的:

  • 在顶层(默认标题);
  • 在页面级别(对于某些页面,但不是全部);
  • 有时,在内部组件级别(例如,用户键入字段).

其他要求:

  • 子项中指定的标题应覆盖父项指定的标题;
  • 可靠(保证路线变更时的清理);
  • 不应该发出任何DOM(即没有组件返回的黑客<noscript>);
  • 我正在使用react-router,但如果这个组件也可以与其他路由器一起工作,那就更好了.

我能用什么?

javascript dom reactjs react-router

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

使用React时的TypeError:无法读取未定义的属性"firstChild"

有时,当使用React库,例如react-router时,我收到此错误:

未捕获的TypeError:无法读取未定义的属性'firstChild'/~/
react-router/~/react/lib/ReactMount.js?:606

我如何解决它?

javascript reactjs react-router

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

react-router中的嵌套路由

我在React-Router中设置了一些嵌套路由(v0.11.6是我正在反对的),但每当我尝试访问其中一个嵌套路由时,它就会触发父路由.

我的路线看起来像这样:

<Route handler={App}>
    <Route name="home" path="/" handler={availableRoutes.Splash} />
    <DefaultRoute handler={availableRoutes.Splash} />

    <Route name="dashboard" handler={availableRoutes.Dashboard}>
        <Route name="dashboard-child" handler={availableRoutes.DashboardChild} />
   </Route>

    <NotFoundRoute handler={NotFound} />
</Route>
Run Code Online (Sandbox Code Playgroud)

如果我将路线折叠起来,它看起来像:

<Route handler={App}>
    <Route name="home" path="/" handler={availableRoutes.Splash} />
    <DefaultRoute handler={availableRoutes.Splash} />

    <Route name="dashboard" handler={availableRoutes.Dashboard} />
    <Route name="dashboard-child" path="/dashboard/dashboard-child" handler={availableRoutes.DashboardChild} />

    <NotFoundRoute handler={NotFound} />
</Route>
Run Code Online (Sandbox Code Playgroud)

它工作正常.我嵌套的原因是因为我会在"仪表板"下面有多个孩子,并希望它们都dashboard在URL中加上前缀.

reactjs react-router

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

使用React路由器的多个参数

我使用React 15.0.2和React Router 2.4.0.我想把多个参数传递给我的路线,我不知道如何以最好的方式做到这一点:

<Route name="User" path="/user" component={UserPage}>   
    <Route name="addTaskModal" path="/user/manage:id" component={ManageTaskPage} />
</Route>
Run Code Online (Sandbox Code Playgroud)

想要的是:

 <Route name="User" path="/user" component={UserPage}>  
    <Route name="addTaskModal" path="/user/manage:id:type" component={ManageTaskPage} />
</Route>
Run Code Online (Sandbox Code Playgroud)

reactjs react-router

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

如何模拟react-router上下文

我有相当简单的反应组件(Link包装器,如果路由处于活动状态,它会添加'active'类):

import React, { PropTypes } from 'react';
import { Link } from 'react-router';

const NavLink = (props, context) => {
  const isActive = context.router.isActive(props.to, true);
  const activeClass = isActive ? 'active' : '';

  return (
    <li className={activeClass}>
      <Link {...props}>{props.children}</Link>
    </li>
  );
}

NavLink.contextTypes = {
  router: PropTypes.object,
};

NavLink.propTypes = {
  children: PropTypes.node,
  to: PropTypes.string,
};

export default NavLink;
Run Code Online (Sandbox Code Playgroud)

我该怎么测试呢?我唯一的尝试是:

import NavLink from '../index';

import expect from 'expect';
import { mount } from 'enzyme';
import React from 'react';

describe('<NavLink …
Run Code Online (Sandbox Code Playgroud)

reactjs react-router enzyme

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

拦截/处理React-router中的浏览器后退按钮?

我正在使用Material-ui的Tabs,它们受到控制,我将它们用于(React-router)链接,如下所示:

    <Tab value={0} label="dashboard" containerElement={<Link to="/dashboard/home"/>}/>
    <Tab value={1} label="users" containerElement={<Link to="/dashboard/users"/>} />
  <Tab value={2} label="data" containerElement={<Link to="/dashboard/data"/>} />
Run Code Online (Sandbox Code Playgroud)

如果我当前正在访问仪表板/数据并点击浏览器的后退按钮,我会(例如)转到仪表板/用户,但突出显示的选项卡仍然停留在仪表板/数据上(值= 2)

我可以通过设置状态来改变,但是当按下浏览器的后退按钮时我不知道如何处理事件?

我发现了这个:

window.onpopstate = this.onBackButtonEvent;
Run Code Online (Sandbox Code Playgroud)

但每次状态改变时都会调用此命令(不仅仅是在后退按钮事件中)

javascript reactjs react-router material-ui

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

不变违规:您不应在<Router>之外使用<Switch>

我有一个问题,我不知道如何解决,我在运行npm测试时遇到此错误Invariant Violation: You should not use <Switch> outside a <Router>.问题是什么,我该如何解决?我运行的测试是带有反应的标准app.test.js

class App extends Component {
  render() {
    return (
      <div className = 'app'>
        <nav>
          <ul>
            <li><Link exact activeClassName="current" to='/'>Home</Link></li>
            <li><Link exact activeClassName="current" to='/TicTacToe'>TicTacToe</Link></li>
            <li><Link exact activeClassName="current" to='/NumGame'>Quick Maths</Link></li>
            <li><Link exact activeClassName="current" to='/HighScore'>Highscore</Link></li>
            <li><Link exact activeClassName="current" to='/Profile'>Profile</Link></li>
            <li><Link exact activeClassName="current" to='/Login'>Sign out</Link></li>
          </ul>
        </nav>
        <Switch>
          <Route exact path='/' component={Home}></Route>
          <Route path='/TicTacToe' component={TicTacToe}></Route>
          <Route path='/NumGame' component={NumberGame}></Route>
          <Route path='/HighScore' component={HighScore}></Route>
          <Route path='/Profile' component={Profile}></Route>
          <Route path='/Login' component={SignOut1}></Route>
        </Switch>
      </div>
    );
  }
};
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-router

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