【问题标题】:How to use Route in ReactJS如何在 ReactJS 中使用路由
【发布时间】:2020-10-27 11:49:44
【问题描述】:

我需要一些关于 reactjs Routes 以及如何正确显示它们的指导。

所以我的 react 目录如下(我将省略不必要的目录和文件)

Routes.js
App.js
src/
   ComponentOne.jsx
   ComponentTwo.jsx

我的现任Routes.js 长这样

import ComponentOne from './src/ComponentOne'
import ComponentTwo from './src/ComponentTwo'

<Route path='/banuka/' exact component={ComponentOne} />
<Route path='/banuka/test' exact component={ComponentTwo} />

而在ComponentOne.jsx 中,除了一个包裹在Linkreact-router-dom 中的按钮外,什么都没有

let valueobject = {<some-key-value-pairs>} // take a note on this line

<Link to={`/banuka/test`}>
    <Button variant="dark">    
    Upload Data
    </Button>
</Link>

所以当我点击这个Button 时,它会导航我两个ComponentTwo 组件。

这就是问题所在:

我想将变量 valueobject 传递给 propsComponentOneComponentTwo

但如您所见,ComponentTwo 已经在 Routes.js 中呈现

我怎样才能做到这一点?

你可以建议我一个更好的方法(即使这意味着我必须删除Routes.js,但如果我能保持原样更好)来实现这一点,所以它看起来像:

<ComponentTwo values={valueobject}/>

谢谢!

【问题讨论】:

  • 我看到了三个,在我看来实现这一点的首选方法:1.)使用全局状态管理,如 Redux、MobX 等,并让组件 2 从存储中获取数据。 2.) 尝试通过 url 表示状态。这意味着路线将是这样的:/banuka/test/:someId/:someMoreInfo,您将根据按下按钮重定向到:/banuka/test/42/bananas,已经提供了这样的解决方案:3.) stackoverflow.com/a/48949836/3977134
  • 看看使用Link发送一些路由状态:reactrouter.com/web/api/Link/to-object
  • @r3dst0rm 我喜欢你的方法,但我怎样才能用查询参数发送这样的数据对象?

标签: reactjs


【解决方案1】:

您可以作为路由状态发送

https://reactrouter.com/web/api/Link/to-object

let valueobject = {<some-key-value-pairs>} // take a note on this line

<Link
  to={{
    pathname: '/banuka/test',
    state: {
      ...valueobject,
    },
  }}
>
    <Button variant="dark">    
    Upload Data
    </Button>
</Link>

【讨论】:

  • 谢谢,请问您为什么要在这里放三个点?
  • @user13456401 嗯,是的,这是传播语法,将valueobject的所有键值对传播到路由状态对象中。所以例如如果valueobject = { foo: 'a', bar: 13 },那么路由状态可以被访问为location.state.foo // alocation.state.bar // 13
  • 我怎样才能用这个方法传递一个正常的值(一个字符串)?语法是什么样子的?
  • @user13456401 to={{ pathname: "...", state: 'foobar' }}to={{ pathname: "...", state: { foo: 'bar' } }},它是对象形式,所以状态 只是 some 值的键,它可以是原语或对象。
  • @user13456401 这不是特殊语法,它只是一个对象文字。几个选项:对象简写to={{ pathname: "...", state: { var1, var2, var3 } }} 这里的键将与变量名称相同,或者普通的对象表示法to={{ pathname: "...", state: { key1: value1, key2: value2, key3: value3} }}。前者可以访问location.state.var3,后者可以访问location.state.key2任何你想在路由状态下发送的都应该被打包到to对象的state属性中。
猜你喜欢
  • 2019-09-26
  • 2020-10-27
  • 2020-03-18
  • 2023-03-05
  • 2019-05-30
  • 1970-01-01
  • 2017-04-29
  • 2021-04-30
  • 2018-07-21
相关资源
最近更新 更多