如何使用 ReactJS 通过我的 React-Router 传递数据?

Posted

技术标签:

【中文标题】如何使用 ReactJS 通过我的 React-Router 传递数据?【英文标题】:How to Pass Data Through My React-Router with ReactJS? 【发布时间】:2017-12-17 14:21:50 【问题描述】:

我有以下 JSON 对象...

 name: "Jessie" 

我希望能够通过我的路由器传递它,以便它可以显示在我的页面上。例如,这是我的根页面...

StaticPage.jsx

export default class StaticPage extends React.Component 
    render() 
        return (
                <div>
                <Router history=hashHistory>
                    <Route path='/' component=Search />
                    <Route path='/favorites' component=Favorites />
                 </Router>
                 </div>
        );
    

所以将这些数据传递给搜索,我想可能看起来像这样......

<Route path='/' component=Search name = this.props.name/>

但是,当我这样做时,什么都没有渲染。我已经对此进行了很多研究,并且从我所读到的内容中了解到,您不能通过路由器传递对象。很奇怪,路由器看起来像一个传统的 React 组件,但它并没有这样的功能。对我来说,解决方法的任何解释都不清楚。任何人都可以为我提供使用此代码的示例吗?我正在使用反应路由器 3.0。 4.0 似乎没有任何神奇的解决方案,所以我想在升级之前我会问。谢谢!

【问题讨论】:

你的意思是把它传递给StaticPage props 还是在URL里面传递? 在我的搜索页面的 URL 中。我已经通过在静态页面中执行 h1 对其进行了测试,它可以正确呈现,但它没有传递到我的页面。 所以您将名称作为道具传递给要传递给 Search 的 StaticPage? 【参考方案1】:

这是因为&lt;Route&gt;component 属性仅渲染组件带有route props,而不是您提供的属性。

您可以在 React Router v4 中的 &lt;Route&gt; 上使用 render component 属性来传递一个函数,该函数返回一个显式传递 name&lt;Search&gt; 元素:

<Route path="/" render=() => <Search name=this.props.name /> /> 

或者component:

<Route path="/" component=() => <Search name=this.props.name /> /> 

但你应该更喜欢render 否则你将有很多重新安装。如果你仍然打算使用路由道具,你也可以这样做:

render=routeProps => <Search name=this.props.name ...routeProps />

一种完全不同的方法,我认为更优雅的一种方法是使用路由参数并直接通过 URL 传递名称:

<Route path="/:name" component=Search />

当您导航到/Bob 时,您可以访问this.props.match.params.name,这将为您提供"Bob"

【讨论】:

感谢您的详尽解释。像魅力一样工作! @JessieRichardson 没问题,很高兴为您提供帮助! @AndrewLi 我正在尝试同样的事情来向我的功能组件发送一些道具,但它没有被传递。你能帮忙吗,有没有其他方法可以将道具传递给功能组件。【参考方案2】:

直接通过路由传递对象数据不是一个好习惯。建议通过这种方式传递name或id等参数:

<Route path='/favorites/:name' component=Favorites />

并从您在目的地的请求中检索它。

这是一个重复的问题:Pass object through Link in react router

【讨论】:

谢谢大家!我遇到了错误,但这只是因为我需要熟悉 RR4 的新规则。我明天早上会继续工作,然后回来汇报。

以上是关于如何使用 ReactJS 通过我的 React-Router 传递数据?的主要内容,如果未能解决你的问题,请参考以下文章

Reactjs 通过 Fluxible 从商店获取事件

ReactJS:如何防止浏览器缓存静态文件?

如何通过 npm 更改用于引导 reactJs 的默认配置文件

Reactjs:使用状态挂钩单击时如何选择一张或多张卡片?

在 ReactJS 中使用搜索框时如何显示来自 API 的信息?

如何从 Reactjs 中的 useEffect 挂钩访问道具