Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ReactJS通过React路由器传递数据?_Reactjs_React Native_React Router - Fatal编程技术网

如何使用ReactJS通过React路由器传递数据?

如何使用ReactJS通过React路由器传递数据?,reactjs,react-native,react-router,Reactjs,React Native,React Router,我有以下JSON对象 { name: "Jessie" } 我想让它通过我的路由器,这样它就可以显示在我的页面上。例如,这是我的根页面 StaticPage.jsx export default class StaticPage extends React.Component { render() { return ( <div> <Router history={hashHistory}

我有以下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>
        );
    }
}
导出默认类StaticPage扩展React.Component{
render(){
返回(
);
}
}
所以将这些数据传递给搜索,我想可能看起来像这样

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

但是,当我这样做时,什么也不会被渲染。我已经对此做了很多研究,并且从我所读到的内容中了解到,不能通过路由器传递对象。这是非常奇怪的bc路由器看起来像一个传统的反应组件,但没有这样的功能。我对工作环境的解释似乎都不清楚。有人能给我提供一个使用此代码的示例吗?我正在使用react路由器3.0。4.0似乎没有什么神奇的解决方案,所以我想在升级之前我应该先问一下。谢谢

这是因为
的道具只渲染组件,而不是您提供的道具

您可以在React Router v4中的
上使用或
组件
道具来传递一个函数,该函数返回一个显式传递
名称的
元素:

<Route path="/" render={() => <Search name={this.props.name} />} /> 
但是您应该更喜欢
渲染
,否则您将需要大量重新计算。如果您仍计划使用路线道具,还可以执行以下操作:

render={routeProps => <Search name={this.props.name} {...routeProps} />}
render={routeProps=>}
一种完全不同的方法,在我看来更优雅的方法是使用route params并通过URL直接传递名称:

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


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

直接通过路由传递对象数据不是一个好的做法。建议通过以下方式传递参数,如名称或id:

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

并从目的地的请求中检索它


这是一个重复问题:

您的意思是将其传递到
StaticPage
props,还是在URL内传递?在URL内传递到我的搜索页面。我已经通过在静态页面中执行h1测试了它,并且它呈现正确,但是它没有传递到我的页面。所以你将名称作为道具传递到静态页面,你想传递到搜索吗?谢谢大家!我有一些错误,但这只是我需要熟悉RR4的新规则。明天早上我会继续工作,并向您汇报。谢谢您的详细解释。工作起来很有魅力@JessieRichardson没问题,很乐意帮忙@AndrewLi我也在尝试向我的功能组件发送一些道具,但没有通过。您能帮忙吗,有没有其他方法可以将道具传递给功能组件。
<Route path='/favorites/:name' component={Favorites} />