标签: react-router-dom

mapStateToProps ownProps 参数为空

我是 React、React Router (v4) 和 Redux 的新手。我试图mapStateToProps(state, ownProps)通过访问来访问 URL 参数,ownProps.match.params.idparams数组始终为空。我已经使用调试器来检查 ownProps 并且id应该传递的参数不在ownProps.

这是我的路线的片段:

    <Switch>
      <Route exact path='/' component={HomePage} />
      <Route path='/about' component={AboutPage} />
      <Route path='/course' component={ManageCoursePage} />
      <Route path='/course/:id' component={ManageCoursePage} />
      <Route path='/courses' component={CoursesPage} />
    </Switch>
Run Code Online (Sandbox Code Playgroud)

这是来自的相关代码ManageCoursePage.js

class ManageCoursePage extends React.Component {
  constructor(props, context) {
    super(props, context);

    this.state = {
      course: Object.assign({}, props.course),
      errors: {},
    };
  }
}

function mapStateToProps(state, ownProps) {
  const courseId = ownProps.match.params.id;
  ...
} …
Run Code Online (Sandbox Code Playgroud)

reactjs react-router redux react-redux react-router-dom

1
推荐指数
1
解决办法
4119
查看次数

window.location 不适用于使用反应路由器 4 的反应应用程序

具有以下“应用程序”,并且window.location不可配置。理想情况下,我想点击提交按钮并转到备用域。这实际上是更大应用程序的一部分,我在其中使用外部身份提供程序进行登录。下面的代码段是一个完整的示例来说明这个问题:

import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';
import { createStore } from 'redux';
import Router from './routes';
import reducers from './reducers';
import { BrowserRouter, Route, Switch } from 'react-router-dom';

const store = createStore(reducers);

class Signin extends React.Component {
  onSubmit() {
    var result = Object.getOwnPropertyDescriptor(window, 'location');
    window.location = 'http://www.bbc.co.uk';
  }

  render() {
    return (
      <div>
        <form
          className="form-horizontal col-xs-10 col-xs-offset-1"
          onSubmit={this.onSubmit.bind(this)}
        >
          <div className="form-group">
            <span className="col-xs-3" />
            <div className="col-sm-6">
              <button …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-router react-router-dom

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

react-router v4.2.2 开关不工作;始终显示主要组件

我正在使用 react-router 将主页上的一组卡片定向到其他单个页面。但是,当我点击卡片时,新页面会在卡片组下方呈现,而我想要的只是呈现新页面。我认为问题可能与我的 App.js 在其中包含主页有关,但我不知道我应该把它放在哪里,是否应该有一个单独的链接等等?我将不胜感激任何帮助!谢谢

这是 App.js 的代码

import React from 'react';
import Routes from '../containers/routes.js';
import ProjectCards from '../containers/project_cards.js';

export default class App extends React.Component {
    render() {
        return(
            <div>
                <ProjectCards />
                <Routes />
            </div>
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

这是主容器:

import React from 'react';
import { connect } from 'react-redux';
import { Link } from 'react-router-dom';
import ProjectCard from '../components/project_card.js';
import Project1 from '../components/project1.js';

class ProjectCards extends React.Component {
    render() {
        var projectCards = this.props.projects.map((project, i) => {
            return ( …
Run Code Online (Sandbox Code Playgroud)

reactjs react-router react-router-component react-router-v4 react-router-dom

1
推荐指数
1
解决办法
3736
查看次数

在根目录上反应路由器通配符路径

是否有可能像大多数社交媒体网站一样做类似的事情

somesite.com/username 但仍有某些路径,如 /login 或 /settings

ReactDOM.render(
    <BrowserRouter>
        <div>
            <Route path="/:id - but not /login or /settings" component={User} />
            <Route path="/login" component={Login} />
            <Route path="/settings" component={Settings} />
        </div>
    </BrowserRouter>, document.getElementById('root')
);
Run Code Online (Sandbox Code Playgroud)

使用精确的建议

<BrowserRouter>
    <div>
        <Route path="/:id" component={User} />
        <Route exact path="/settings" component={Settings} />           

    </div>
</BrowserRouter>, document.getElementById('root')

const User = () => {    
    return (
        <h1>user</h1>
    )
}

const Settings = () => {    
    return (
        <h1>settings</h1>
    )
}
Run Code Online (Sandbox Code Playgroud)

转到 /settings 将显示

用户

设置

reactjs react-router react-router-v4 react-router-dom

1
推荐指数
1
解决办法
4790
查看次数

React Router 中的中间 URL 参数

我正在尝试路由一条带有中间参数的路径。这是我的路线的样子。

import Events from "./views/EventsView";
import Event from "./views/EventView";
import NotFound from "./views/NotFoundView";
import RegistrationView from "./views/RegistrationView"

export default [
  {path: "/", component: Events, exact: true},
  {path: "/events", component: Events, exact: true},
  {path: "/events/:projectId", component: Event, exact: true},
  {path: "/events/:projectId/register", component: RegistrationView, exact: true},
  {component: NotFound}
]
Run Code Online (Sandbox Code Playgroud)

然后我将我的路线映射到 a <Switch>which 中 a 中<Router>

<Switch>
    {
        return routes.map(({path, component, exact}, key) =>
            <Route key={key} path={path} component={component} exact={exact}/>)
}
</Switch>
Run Code Online (Sandbox Code Playgroud)

Link用来访问Event组件。

<Link to="/events/1234">Title Here</Link>
Run Code Online (Sandbox Code Playgroud)

问题 …

javascript reactjs react-router react-router-v4 react-router-dom

1
推荐指数
1
解决办法
1524
查看次数

react-router-dom 链接 onclick 获取路径

我在单击时尝试处理路径<Link/>,我需要使用e.preventDefault();防止路由器内的动画,所以这是我的代码,基本上我无法捕获更改历史目标的位置路径:

import React from 'react'; 
import { Link } from "react-router-dom";
export default class NavTransitions extends React.Component   {  
    constructor(props) {
        super(props);  
        this.changeRoutePath=this.changeRoutePath.bind(this);    
    } 
    changeRoutePath(e){
        e.preventDefault(); 
        this.props.history.push(this.match.path);
        console.log('this.match.path '+this.match.path);
        console.log('changeRoutePath');
    }
    render(){ 
        return(
            <div>
                <Link to="/item" 
                    onClick={this.changeRoutePath}>Prevent </Link>
           </div>
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

错误说 this.math 是未定义的

reactjs react-router react-router-dom

1
推荐指数
1
解决办法
5773
查看次数

如何在悬停反应路由器链接时实现显示下划线的过渡效果?

我在我的 react 项目中使用 react-router-dom 节点包来实现路由。

设置路由器链接后,我默认使用以下自定义 CSS 隐藏链接下划线:

let styles = theme => ({
   TextLink: {
      position: 'relative',
      color: 'white',
      textDecoration: 'none',    
      '&:hover':{
            color: 'white',
      },
});
Run Code Online (Sandbox Code Playgroud)

使用这个我能够隐藏。

我的目标是制作一个链接,在悬停时显示下划线并具有过渡效果(链接下划线从中心向两端增长)。

带有任何附加节点包的修改后的 CSS 或代码示例会有所帮助。

javascript css reactjs react-router-dom

1
推荐指数
1
解决办法
3853
查看次数

编写测试以使用 jest 和 react-testing-library 检查本地 setState 调用

我目前正在使用 react-testing-library 并且似乎无法弄清楚如何测试组件的 setState 。

在以下示例中,我尝试根据 API 中的数据测试加载的项目数是否正确。稍后将扩展它以测试诸如项目之间的交互之类的事情。

成分:

...

componentDidMount() {
    this.getModules();
}

getModules () {
    fetch('http://localhost:4000/api/query')
    .then(res => res.json())
    .then(res => this.setState({data : res.data}))
    .catch(err => console.error(err))
}

...

render() {
  return(
      <div data-testid="list">
          this.state.data.map((item) => {
              return <Item key={item.id} data={item}/>
          })
      </div>
  )
}
Run Code Online (Sandbox Code Playgroud)

测试:

...

function renderWithRouter(
    ui,
    {route = '/', history = createMemoryHistory({initialEntries: [route]})} = {},) {
    return {
        ...render(<Router history={history}>{ui}</Router>),
        history,
    }
}

...

test('<ListModule> check list items', () => {
     const data = …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs jestjs react-router-dom react-testing-library

1
推荐指数
1
解决办法
4287
查看次数

在 react-router v4 中看到嵌套路由中的空白页

我是新手,仍在学习。我正在尝试在我的 React 项目中添加嵌套路由,以便 div 的内容根据路由而变化。

以下是我的组件:-

//index.js

import 'bootstrap/dist/css/bootstrap.min.css';
import 'font-awesome/css/font-awesome.min.css';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';

library.add(faIgloo);

ReactDOM.render(<BrowserRouter>
  <App />
</BrowserRouter>, document.getElementById('root'));

serviceWorker.unregister();


// app.js
import React, { Component } from 'react';
import { Route, Switch, Redirect } from 'react-router-dom';
import Login from './components/login/login.js'
import Protected from './components/protected/protected.js'



import './App.css';

class App extends Component {

  render() {
    return (
        <Switch>
          <Route exact path="/protected" component={Protected}/>
          <Route path="/login" component={Login}/>
        </Switch>
    );
  }
}

export default …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-router-v4 react-router-dom

1
推荐指数
1
解决办法
5552
查看次数

带有 API 调用的 ReactJS 保护路由

我正在尝试在 ReactJS 中保护我的路由。在每个受保护的路线上,我想检查保存在 localStorage 中的用户是否良好。

您可以在下面看到我的路由文件 (app.js):

class App extends Component {
    render() {
        return (
            <div>
                <Header />
                <Switch>
                    <Route exact path="/" component={Home} />
                    <Route path="/login" component={Login} />
                    <Route path="/signup" component={SignUp} />
                    <Route path="/contact" component={Contact} />
                    <ProtectedRoute exac path="/user" component={Profile} />
                    <ProtectedRoute path="/user/person" component={SignUpPerson} />
                    <Route component={NotFound} />
                </Switch>
                <Footer />
            </div>
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

我的protectedRoute 文件:

const ProtectedRoute = ({ component: Component, ...rest }) => (
    <Route {...rest} render={props => (
        AuthService.isRightUser() ? (
            <Component {...props} />
        ) …
Run Code Online (Sandbox Code Playgroud)

javascript routes async-await reactjs react-router-dom

1
推荐指数
1
解决办法
2687
查看次数