【发布时间】:2021-01-22 21:58:44
【问题描述】:
我正在使用 React-Router-Dom 学习 React Navigation。我创建了一个简单的应用程序来说明问题:
在 App.js 内部我有一个 Route,它指向 url “/” 并加载功能组件 DataSource.js。
在 DataSource.js 中,我有一个变量名为“John”的状态。还有一个按钮,onclick 指向一个类方法,该方法应该使用 Route 加载名为 ShowData.js 的无状态组件。
ShowData.js 接收 props.name。
我要做的是:当点击DataSource.js中的按钮时,url变为“/showdata”,ShowData.js被加载并显示DataSource.js接收到的props.name,以及DataSource。 js 消失了。
App.js
import './App.css';
import {Route} from 'react-router-dom'
import DataSource from './containers/DataSource'
function App() {
return (
<div className="App">
<Route path='/' component={DataSource}/>
</div>
);
}
export default App;
数据源.js
import React, { Component } from 'react';
import ShowData from '../components/ShowData'
import {Route} from 'react-router-dom'
class DataSource extends Component{
state={
name:' John',
}
showDataHandler = ()=>{
<Route path='/showdata' render={()=><ShowData name={this.state.name}/>}/>
}
render(){
return(
<div>
<button onClick={this.showDataHandler}>Go!</button>
</div>
)
}
}
export default DataSource;
显示数据.js
import React from 'react';
const showData = props =>{
return (
<div>
<p>{props.name}</p>
</div>
)
}
export default showData;
我尝试了以下方法,但是,即使 url 确实更改为“/showdata”,DataSource 组件也是唯一呈现到屏幕上的东西:
数据源.js
showDataHandler = ()=>{
this.props.history.push('/showdata')
}
render(){
return(
<div>
<button onClick={this.showDataHandler}>Go!</button>
<Route path='/showdata' render={()=>{<ShowData name={this.state.name}/>}}/>
</div>
)
}
我也尝试了以下方法,但单击按钮时没有任何变化:
数据源.js
showDataHandler = ()=>{
<Route path='/showdata' render={()=>{<ShowData name={this.state.name}/>}}/>
}
render(){
return(
<div>
<button onClick={this.showDataHandler}>Go!</button>
</div>
)
}
如何使用 DataSource.js 中的嵌套 Route 将 prop 传递给另一个组件?
谢谢。
编辑:正如用户 Sadequs Haque 所指出的那样,当您通过 url 传递该道具时,可以检索道具,例如“/showdata/John”,但这不是我想做的:我'希望 url 只是'/showdata/'。
他还指出,可以有条件地渲染 DataSource 或 ShowData,但这不会将 url 从 '/' 更改为 '/showdata'。
【问题讨论】:
-
"如何使用 DataSource.js 中的嵌套路由将 prop 传递给另一个组件?"最简单的方法是使用路由器道具。因此,无需在嵌套组件中创建新路由器,您只需链接到主路由器并通过主路由器传递一个道具。
标签: reactjs