javascript - React Router 结构化 - 传递函数
问题描述
我对 reactjs 很陌生,只是想知道是否有任何简单的方法可以将来自同一组件的信息显示到不同的路由。在下面的代码中作为示例,我只有两个函数,它们只是返回充满文本的 div,调用它们并立即渲染它们(在类中或在路由器中)只会让它们位于同一个“页面”上。
我试过通过道具传递参考,但它们总是未定义。我认为状态变化会很尴尬,因为没有真正的“事件”。我正在使用 create-react-app、react-routerv4 和 react-bootstrap。
在 App.js 中
import React, { Component } from 'react';
import './App.css';
import NavBar from './Components/NavBar/NavBar.js';
import Band from './Components/Text/Band.js';
import { Router, BrowserRouter, Link, Route } from 'react-router-dom';
class App extends Component {
render() {
return(
<div>
<BrowserRouter>
<div className="RenderRouter">
<Route exact path='/' component={NavBar}/>
<Route exact path='/' component={ControlledCarousel}/>
<Route exact path='/' component={Home}/>
//<Route exact path='/Artists/ArtistX' component={Band}/>
<Route exact path='/Artists/Artist1' component={NavBar}/>
<Route exact path='/Artists/Artist1' render={props => <Band band1text = {this.props.band1text} />}/>
<Route exact path='/Artists/Artist2' component={NavBar}/>
<Route exact path='/Artists/Artist2' render={props => <Band band2text = {this.props.band2text} />}/>
</div>
</BrowserRouter>
</div>
);
}
}
export default App;
在 Band.js 中
import React, { Component } from 'react';
import './Band.css';
class Band extends Component {
//Constructor for state change would go here
band1text(props) {
return(
<div id="band1Text" className="BandText">
<h1>"The best riffs!</h1>
</div>
);
};
band2text(props) {
return(
<div id="band2Text" className="BandText">
<p>More info coming soon! Check out the interview!</p>
</div>
);
};
//Create handlers to call functions, and pass reference?
render() {
return(
<div className="BandDescription">
//calling in DOM render object, can't pass props from here?
//{this.props.band1text()} = compiler error
{this.band1text()}
{this.band2text()}
</div>
);
}
}
export default Band;
为每条路线的每一部分(即,BandX.js、CarouselX.js)只使用单独的组件和类可能会更容易,但这可能会变得冗长,并且必须导入许多文件。我也在使用 react 为应用程序构建音乐播放器组件,这就是为什么我不只是使用标准 JS。
解决方案
道具将是未定义的,因为没有带有 bandText 的道具被传递给 App 组件。路由嵌套在 App 组件中,this.props.band1Text 意味着您期望从传递给 App 的道具中读取。尝试将 band1Text 和 band2Text 作为道具传递给 App 组件。另外要读取不是函数的道具,只需在 Band.js 组件中使用 {this.props.band1Text}
推荐阅读
- cocoa - 第三方 SDK 在对我的应用程序进行公证后返回不正确的值
- php - 登录 Magento 2 时出错:开源管理面板
- amazon-web-services - 使用 AD 连接器进行 SFTP 的 AWS 传输
- java - flink 流有缓存/持久化功能吗?(如火花)
- python - 无头硒立即退出
- kubernetes - Kubernetes xray-daemon pod 给出错误 Back-off restarting failed container
- python - 如何将用逗号分隔的大列表拆分为 5 列的表?
- scipy - ValueError:无法识别的引擎 zarr 必须是以下之一:['scipy', 'store']
- python - 从另一个脚本运行脚本时出现 NameError
- r - 在ggplot的对数轴上绘制负数