标签: react-router-v4

React-Router:始终显示标题,但不在登陆页面中显示

我当前的路由器树如下所示:

\n\n
  <Route exact path="/" component={Landing} />\n  <Route component={Header} />\xc2\xa7\n  <Route path="/component1" component={Component1} />\n  <Route path="/component2" component={Component2} />\n  ...\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望<Header />在渲染组件时始终显示<Component1 /><Component2 />但在用户位于登陆页面 ( <Landing />) 时不显示。

\n\n

然而,对于上面的反应路由器树,<Header />始终显示。

\n

reactjs react-router react-router-v4

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

无法通过重构更改 StateHandlers 的状态

我有这个按钮并使用recompose中的StateHandlers进行操作。目标只是将按钮状态从 active: false更改为 active: true

const EnhancedButton = withStateHandlers(
  ({ initialState = false }) => ({
    active: initialState
  }),
  {
    onTrigger: ({ active }) => ({
      active: true
    })
  }
)(({ active, onTrigger, children, id }) => {
  console.log(active)
  return (
    <Button
      onClick={() => onTrigger()}
      toggle
      active={active}
      size="massive"
      style={styles.button}
      as={Link}
      to={`/${id}`}
    >
      {children}
    </Button>
  )
})
Run Code Online (Sandbox Code Playgroud)

我点击按钮,然后我被重定向到新页面,然后我返回,按钮仍然处于活动状态: false我希望它处于 活动状态: true

reactjs recompose react-router-v4

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

有什么更好的方法来确定我当前使用react-router 4走哪条路线

我正在构建一个 React 应用程序并使用 React Router 4。导航栏由左侧的链接和右侧的几个按钮组成(我们称之为右侧工具)。

导航栏是布局的一部分。现在这些按钮对于不同的页面是不同的。例如,我有 3 个页面仪表板、历史记录和管理。在 Dashboard 中有一个 Filter 按钮,History 会有 Filter、Download。管理员将没有按钮。

在 Angular 中,它们是 $state.current 但在 React router 中找不到类似的东西。

匹配 url 字符串是很痛苦的。有人对此有更好的解决方案吗?

routes reactjs react-router react-router-v4

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

开关有什么作用?

我有以下代码:

import {Route, Switch} from 'react-router-dom';

<Route exact path="/" component={Landing} />
<div className="container">
  <Route path="/register" render={() => (
    <Register {...this.props} />
  )}/>
  <Route path="/login" render={() => (
    <Login {...this.props}/>
  )}/>
  <Switch>
    <PrivateRoute path="/dashboard" component={Dashboard}/>
  </Switch>
  <Switch>
    <PrivateRoute path="/create-profile" component={CreateProfile}/>
  </Switch>
Run Code Online (Sandbox Code Playgroud)

用户登录(使用/login)后,他被重定向到/dashboard。但是,如果我<Switch>从 中删除/dashboard,用户仍然被重定向到/dashboard但该Dashboard组件不会被呈现。

那么它究竟是如何<Switch>工作的呢?

reactjs react-router-v4

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

html标签“/href”和navlink或Link的区别

html标签“/href”和react-router提供的导航页面的navlink有什么区别?我可以使用两者来将页面导航到不同的 URL,那么为什么需要引入 Navlink 或 Link?

reactjs react-redux react-router-v4 react-navigation

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

移动到 cloudfront + SSL 后,应用程序中的路由器链接断开

我有一个反应应用程序,使用托管在 S3 存储桶中的反应路由器,使用 Route53 作为 DNS 提供程序。该应用程序在 Route53 配置指向 S3 存储桶的情况下运行良好。

由于我想使用 SSL,我创建了一个指向存储桶的 Cloudfront 分配,带有 SSL 证书,并将 DNS 指向它。由于这样做,所有链接都无效(example.com 有效,但 example.com/foo 无效)。它只是返回一个 NoSuchKey 错误。我知道这是不正确的,因为钥匙肯定在那里,而且它以前是有效的。

amazon-s3 amazon-cloudfront reactjs react-router-v4

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

有没有办法在反应路由中隐藏查询字符串中的参数?

有没有办法从反应应用程序的网址中删除查询字符串?

this.history.push('component/:id')

我希望在导航时从浏览器 URL 中删除 id。

routes reactjs react-routing react-router-v4 react-router-dom

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

以编程方式导航:React Router V4+ Typescript 给出错误

使用 react router v4 和 Typescript 以编程方式导航时出错:

'Readonly & Readonly<{ children?: ReactNode; 类型上不存在属性“历史” }>

我想在 API 调用成功或失败时重定向到特定路径。但无法做到这一点。

路由器代码

import { BrowserRouter as Router , Switch , Route} from 'react-router-dom';
import * as React from 'react';

class App extends React.Component<{}, {}>  {
 render()
 {
    <Router>
      <Switch>
          <Route exact={true} path='/' component={Login}/>
          <Route path='/home' component={Home}/>
          <Route path='/test' component={Test}/>
      </Switch>
    </Router>
  }
}
export default App;

Run Code Online (Sandbox Code Playgroud)

成分

import { withRouter } from "react-router-dom";
import * as React from 'react';

class Test extends React.Component<IProps, IState> …
Run Code Online (Sandbox Code Playgroud)

typescript reactjs react-router-v4

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

在 react-router-dom 中测试 PrivateRoute

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

我在 react-router-dom 文档中实现了私有路由

function PrivateRoute({ authenticated, ownProps }) {

    let {component:Component, ...rest} = ownProps


     //PrivateRoute, If  not authenicated ie  false, redirect
    return (
      <Route
      //  JSX Spread sttributes to get path for Route
        {...rest}
        render={() =>  authenticated ? (
            <Component />
          ) : 
          <Redirect
              to={{pathname: "/" }}
            />
        }
      />
    );
  }

  export default PrivateRoute
Run Code Online (Sandbox Code Playgroud)

PrivateRoute 是一个从 Redux-Store 获取身份验证状态的连接组件。

我正在尝试使用 redux-mock-store 和从酶安装来测试连接的组件。

import configureStore from 'redux-mock-store'
const mockStore = configureStore()
const authStateTrue = {auth: {AUTHENTICATED: true}}; 

 test('Private path renders …
Run Code Online (Sandbox Code Playgroud)

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

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

使用 React 测试库提交后测试重定向

我正在尝试测试登录组件。具体来说,它会在成功登录时重定向。手动测试时它工作正常。但在我的测试中,它从不进行重定向,因此找不到“注销”链接:

test('successfully logs the in the user', async () => {
  const fakeUserResponse = {success: true, token: 'fake_user_token'}
  jest.spyOn(window, 'fetch').mockImplementationOnce(() => {
    return Promise.resolve({
      json: () => Promise.resolve(fakeUserResponse),
    })
  })
  const { getByText, getByLabelText, findByTestId } = render(<Router><Login /></Router>)

  fireEvent.change(getByLabelText(/email/i), {target: {value: 'dan@example.com'}})
  fireEvent.change(getByLabelText(/password/i), {target: {value: 'password1234'}})
  fireEvent.click(getByText(/submit/i))

  await waitForElement(() => getByText(/logout/i));
})
Run Code Online (Sandbox Code Playgroud)

我正在使用react-router版本 4 进行重定向,如下所示:

{state.resolved ? <Redirect to="/" /> : null}
Run Code Online (Sandbox Code Playgroud)

我会以错误的方式解决这个问题吗?

unit-testing reactjs jestjs react-router-v4 react-testing-library

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