标签: react-router-dom

React-Router getUserConfirmation 功能问题

当用户单击浏览器后退按钮时,我试图观察 React Router 状态的变化。我的应用程序集成了 redux Provider 和 Material-UI。但是我无法开始getUserConfirmation工作。

请在下面找到我的代码片段。

 const getConfirmation = (message, callback) => {
      const allowTransition = window.confirm(message)
      strong textcallback(allowTransition)
    }
    const myHistory = createBrowserHistory();

    ReactDOM.render(
      <Provider store={store} >
        <MuiThemeProvider>
           <BrowserRouter basename="/app" history={myHistory} getUserConfirmation={getConfirmation} >
              <App />
           </BrowserRouter>
        </MuiThemeProvider>
      </Provider>, document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)

使用的库版本:

React v16
react-router-dom v4.2.2
react-redux v5.0.6
material-ui v0.20.0
redux v3.7.2
Run Code Online (Sandbox Code Playgroud)

我提到的一些文档:

https://reacttraining.com/react-router/web/api/BrowserRouter
https://codepen.io/pshrmn/pen/MpOpEY
https://codepen.io/anon/pen/gRXzMg?editors=0010
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助,谢谢

reactjs react-router material-ui react-redux react-router-dom

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

使用serviceworker切换路由,无需向服务器发送请求

我有一个React应用程序react-router-dom。提供静态文件(index.html、 、...),将所有请求重新路由到使用。我用它来将所有 React 和 babel 代码编译到单个文件。整个内容在第一次访问时加载(加上使用)。blah blah.jsApache serverindex.html.htaccessWebpack.jscache first SW

每次加载路由(例如/profile)时,请求都会传递到服务器(发送HTTP请求),从而导致不必要的延迟

如何在不向服务器发送任何请求的情况下切换路由?

是否可以使用Service Worker(就像我的缓存优先方法一样)?


这是我的反应路由器组件

class App extends React.Component{
   render(){
       return(
            <BrowserRouter>
                <Switch>
                    <Route path="/" exact component={Home} />
                    <Route path="/profile" exact component={Profile} />
                    <Route path="/about"  component={About}/>

                </Switch>
            </BrowserRouter>
        );
   }     
}
ReactDOM.render(<App/>,document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)

reactjs service-worker react-router-dom

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

React Router Switch 语句中的路由分组为内部组件,不会转到 Not Found 路由

如果未找到路线,我正在尝试呈现“未找到”页面。我将路线分成模块。因此,当我执行 switch 语句时,在 switch 的底部添加未找到的页面,例如:

const AccessRoutes = () => {
return (
    <React.Fragment>
        <Route path="/login" exact component={Login}/>
        <Route path="/register" exact component={Register} />
        <Route path="/forgot-password" exact component={ForgotPassword}/>
    </React.Fragment>
       )
}
export default () => {
    return (
     <Switch>
         <AccessRoutes/>
         <Route render={() => <div>Not found</div>}
     </Switch>
    )
}
Run Code Online (Sandbox Code Playgroud)

当您输入不在 上的路径时,未找到的路径永远不会匹配AccessRoutes,例如/hey显示空白屏幕。如果我放置路由而不将它们包装在另一个组件中,它就可以工作。

我缺少什么?

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

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

无法使用 Link 组件传递状态。为什么状态未定义?

我正在尝试学习“react-router”,我正在制作一个应用程序,它有一个输入字段,为您提供一个下拉列表,其中包含欧洲各个火车站的链接,当您单击该链接时,它将呈现一个组件,在此封装Station组件并显示有关该站的更多详细信息。

对于此应用程序,我必须对外部 API 进行两次调用。第一个是找到火车站并将其显示在下拉列表中。这是有效的,从那里我可以获取电台的名称并将其放入下拉列表中,我还获得了一个id用于查询第二个 API 以获取电台的详细信息的名称。当用户单击下拉列表中的电台时,就会发生这种情况。这现在有效。我的问题是,当用户单击下拉列表中的电台时,我已经丢失了电台的名称。我想以某种方式将其传递给车站组件。

这是我的车站组件:

const Station = (props) => {
 return (
  <h1>Station name: {props.location.state.name}</h1>
 )
}

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

这是下拉组件,为了简单起见,我对两个电台进行了硬编码以尝试使其工作,否则下拉列表是与用户查询匹配的电台列表。

const Dropdown = (props) => {

return (
<ul>
  <li>
    <Link to={'/station/London'} key="lon" state={{name: 'London Central Station'}}>London </Link>
  </li>
  <li>
    <Link to={'/station/Paris'} key="par" state={{name: 'Paris Central Station'}}>Paris</Link>
  </li>
</ul>
  )
  }

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

我尝试使用组件state中的 prop传递站名称Link,但是当Station组件安装时,该名称props.location.state是未定义的。

最后是我的路线:

const Details = (props) => {
return …
Run Code Online (Sandbox Code Playgroud)

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

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

React.js - 将道具从 hoc 传递给孩子

我一直在尝试将我的 HOC 中的一些道具传递给孩子们。HOC 包装反应路由器开关和路由。子组件中缺少道具。我使用 React.CloneElement 将道具添加到孩子,但似乎不起作用

<BrowserRouter>
<Layout>
        <React.Suspense fallback={loading()}>
          <Switch>
            <Route exact path="/" component={Login} />
            <Route path="/dashboard" component={Home} />
            <Route path="/tickets" component={Tickets} />

          </Switch>
        </React.Suspense>
      </Layout>
    </BrowserRouter>
Run Code Online (Sandbox Code Playgroud)

这是 HOC(布局)

class Layout extends React.Component {
   .....

    render() {
        const children = this.props.children && React.cloneElement(this.props.children, { data: 'ok' })
...
Run Code Online (Sandbox Code Playgroud)

子组件没有得到数据道具,我只得到这个

{history: {…}, location: {…}, match: {…}, staticContext: undefined}
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-router react-router-dom

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

如何正确实现页面转换的 React Transition Group

我整天都在扯头发,试图让它发挥作用。我注意到的是,无论出于何种原因,过渡类 (classNames="fade") 永远不会应用于页面元素。因此,当我从一个页面导航到另一个页面时,两个页面组件都会在短时间内(超时时间)显示。

我应该在 600 毫秒内拥有什么...

<div class="RTG"> 
    <div class="page fade-appear fade-enter fade-enter-active"> <!-- 
destination component HTML --></div>
    <div class="page fade-exit fade-exit-active"> <!-- start component HTML --></div>
</div>
Run Code Online (Sandbox Code Playgroud)

我得到的是..

<div class="RTG">
   <!-- "fade..." classes never applied to the child nodes" -->
   <div class="page"> <!-- destination component HTML --></div>
   <div class="page"> <!-- start component HTML --></div>
</div>
Run Code Online (Sandbox Code Playgroud)

然后在 600 毫秒超时后,我只剩下......

<div class="RTG">
   <div class="page"> <!-- destination component HTML --></div>
</div>
Run Code Online (Sandbox Code Playgroud)

注意 1:我将“RTG”类名放在 TransitionGroup 组件上,只是为了验证我的“页面”类组件实际上是 TransitionGroup 组件的直接后代。不存在任何其他原因。

注意 2:我使用的是 react-transition-group@2.4.0,因为我与最新版本存在兼容性问题。 …

reactjs react-router react-router-v4 react-router-dom react-transition-group

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

错误:不变失败:您不应在 &lt;Router&gt; 之外使用 &lt;Link&gt; (storybookjs)

它以某种方式正常工作react-scripts start。但是当尝试通过故事书查看各个组件时,它会抛出一个错误,就像上面标题中所说的那样。

\n\n

这是我的代码。

\n\n

index.tsx

\n\n
import React from \'react\';\nimport ReactDOM from \'react-dom\';\nimport \'./index.css\';\nimport App from \'./App\';\nimport * as serviceWorker from \'./serviceWorker\';\n\n\nReactDOM.render(<App />, document.getElementById(\'root\'));\n
Run Code Online (Sandbox Code Playgroud)\n\n

App.tsx

\n\n
import React from \'react\';\nimport\xc2\xa0{\xc2\xa0BrowserRouter,\xc2\xa0Route,\xc2\xa0Switch, Link\xc2\xa0}\xc2\xa0from\xc2\xa0"react-router-dom";\nimport { Register } from \'./pages/register/register\'\nimport { Login } from \'./pages/login/login\'\nimport { Home } from \'./pages/home/home\'\n\nconst App: React.FC = () => {\n  return (\n    <div id="app-root">\n      <BrowserRouter>\n        <Switch>\n          <Route path="/" exact component={Home} />\n          <Route path="/register" exact component={Register} />     \n          <Route path="/login" exact component={Login} />\n        </Switch>\n      </BrowserRouter>\n …
Run Code Online (Sandbox Code Playgroud)

typescript react-router-v4 react-router-dom storybook

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

如何使用反应路由器将数据从一个页面传递到另一个页面

请我需要关于 react-router-dom 的帮助,我是图书馆的新手,从那以后似乎可以找到任何解决方案。我从 api 调用中得到三个结果,其中我映射数据以在 UI 上呈现它,现在我现在需要的是,如果我单击此列表之一上的一行,我希望它带我到屏幕仅显示我单击的单个内容的详细信息。

import React, { Component } from "react";

export default class User extends Component {
  state = { userDetails: "" };

  componentDidMount() {
    axios.get(`https://urlforapi.com`)
    .then(({ data }) => {
      this.setState({
        userDetails: data
      });
    });
  }

  render() {
    const { userDetails } = this.state;
    return (
      <div>
        {userDetails
          ? userDetails.map(info => {
              return (
                <Link to="/home/userDetails">
                  <div key={info.id}>
                    <p>{info.name}</p>
                  </div>
                  <div>
                    <p>{info.age}</p>
                  </div>
                  <div>
                    <p>{info.description}</p>
                  </div>
                </Link>
              );
            })
          : null}
      </div>
    );
  }
}


Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-router-dom

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

反应刷新后路由未定义

应用程序.jsx

<Router history={history}>
      <>
        <Switch>
          <Route path="/" exact component={HomePage} />          
          <Route path="/test/:id" exact component={TestPage} /> 
          <Route component={NotFound} />         
        </Switch>
      </>
</Router>
Run Code Online (Sandbox Code Playgroud)

render() 内的 HomePage.jsx

<Link to="/test/1" >Test link</Link>
Run Code Online (Sandbox Code Playgroud)

当我单击链接时,页面成功地将我重定向到http://localhost:8080/test/1,我可以看到该页面,但如果我单击刷新,页面就会消失,我只能看到空白屏幕,如果我想要从外部访问它,即如果我直接在浏览器上输入相同的网址,我看不到该页面,它是空白的。如何在刷新时管理它并从外部访问它?

我在刷新时收到控制台消息

错误

javascript reactjs react-router-dom

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

如何使用带有来自 antd 表列的 id 的 React Router &lt;Link&gt;

在我的项目中,我有一个 antd 表。在那个表中,我列出了运动员。当我点击运动员的名字时,我应该被导航到运动员资料页面。

运动员资料路线 /athletes/{id}

但是对于这张桌子,我无法获得任何价值id

这是我的数据源

[
   {
      email: "x@x.com",
      firstName: "X",
      id: 402,
      lastName: "X"
   },
   {
      email: "y@y.com",
      firstName: "Y",
      id: 403,
      lastName: "Y"
   },
   {
      email: "z@z.com",
      firstName: "Z",
      id: 404,
      lastName: "Z"
   }
]
Run Code Online (Sandbox Code Playgroud)

以下是列对象的代码

const columns = [
      {
        title: "First Name",
        dataIndex: "firstName",
        className: "col-first-name",
        render: (text) => (
          <Link to={"/athletes/" + ???}>{text}</Link>
        ),
      },
      {
        title: "Last Name",
        dataIndex: "lastName",
        className: "col-last-name"
      },
      {
        title: "Email",
        dataIndex: "email",
        className: "col-email", …
Run Code Online (Sandbox Code Playgroud)

reactjs antd react-router-dom

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