html - 在 react-bootstrap 中将变量传递给页面
问题描述
我有一个结构如下的网站:
Public
| index.html
src
index.css
index.js
| components
App.js
Events.js
Feed.js
Detail.js
Entry.js
...
中的所有内容都<App />
在 index.html 中呈现
import React from 'react'
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
import { Navigation, Footer, Home, Feed, Search, About, Contact } from "../components";
function App() {
return (
<Router>
<Navigation />
<Switch>
<Route path="/" exact component={() => <Home />} />
<Route path="/feed" exact component={() => <Feed />} />
<Route path="/detail" exact component={() => <Detail />} />
<Route path="/search" exact component={() => <Search />} />
<Route path="/about" exact component={() => <About />} />
<Route path="/contact" exact component={() => <Contact />} />
</Switch>
<Footer />
</Router>
)
}
export default App
该Feed
组件呈现一系列,Events
每一个都有一个event.id
.
该event.id
值是我想用来在上面 Navigation / Switch 引用的组件中呈现正确数据的值<Route path="/detail" exact component={() => <Detail />} />
我怎样才能:
- 链接到
Detail
路线和 id
将事件的传递给Detail
该路由中的组件
import React, {Component} from "react";
import Header from "./Header"
import Events from "./Events"
class Feed extends Component {
state = {
events: []
}
componentDidMount() {
fetch('http://127.0.0.1:5002/events')
.then(res => res.json())
.then((data) => {
this.setState({ events: data })
})
.catch(console.log)
}
render() {
return (
<div className="feed">
<Header />
<div class="container">
<Events events={this.state.events} />
</div>
</div>
);
}
}
export default Feed;
import React from 'react';
import Accordion from 'react-bootstrap/Accordion'
import Card from 'react-bootstrap/Card'
import Alert from 'react-bootstrap/Alert'
import Button from 'react-bootstrap/Button'
import './App.css'
function Events ({events}){
return (
<div>
<center><h1>Event List</h1></center>
{events.map((event) => (
<div class="mt-2">
<Accordion defaultActiveKey="0" className="rounded ">
<Card className="rounded">
<Accordion.Toggle as={Alert} variant="secondary" eventKey={event.id} className="accordion-title border-0"><span className="badge badge-secondary">{event.date}</span><span> </span><span>{event.title}</span>
</Accordion.Toggle>
<Accordion.Collapse eventKey={event.id} className="accordion-collapse">
<Button href="detail" variant="secondary" size="lg" disabled>Link</Button>
<Card.Body className="rounded">{event.summary}</Card.Body>
</Accordion.Collapse>
</Card>
</Accordion>
</div>
))}
</div>
)
}
export default Events;
以上三个渲染如下:
下面的Detail
组件需要接受该{route}
值,以便我可以调用 API。我只是不知道如何在调用时将该值接受到类中。
import React, {Component} from "react";
import Detail from "./Detail"
class Detail extends Component {
state = {
entries: []
}
componentDidMount({route}) {
fetch('http://127.0.0.1:5002/events/'+{route}+'/')
.then(res => res.json())
.then((data) => {
this.setState({ entries: data })
})
.catch(console.log)
}
render() {
return (
<div className="entries">
<Header />
<div class="container">
<div class="row align-items-center my-5">
<Entry entry={this.state.entries} />
</div>
</div>
</div>
);
}
}
export default Detail;
解决方案
修复了这个。
App.js 已更新为将变量包含在开关中:event_id
<Switch>
<Route path="/" exact component={() => <Home />} />
<Route path="/search/:query" exact component={() => <Search />} />
<Route path="/feed" exact component={() => <Feed />} />
<Route path="/detail/:event_id" component={Detail} />
<Route path="/blog" exact component={() => <Blog />} />
<Route path="/about" exact component={() => <About />} />
<Route path="/contact" exact component={() => <Contact />} />
</Switch>
页面链接已更新,包括路径和event.id
<div><span><Link to={`/detail/${event.id}`}>{event.title}</Link></span></div>
并Detail.js
componentDidMount()
调用与变量名匹配的道具:
componentDidMount() {
fetch('http://127.0.0.1:5002/events/'+this.props.match.params.event_id+'/entries')
.then(res => res.json())
.then((entryData) => {
this.setState({ entries: entryData })
})
.catch(console.log)
}
推荐阅读
- javascript - 如何为 D3 图表启用静态链接
- python - 如何使用 Skimage 调整训练数据的大小?
- c# - 创建 3D 阵列意见系统
- list - Haskell:如何创建一个空列表作为数据类型的选项?
- javascript - 在 SVG 路径中移动到鼠标单击 (d3.js)
- deep-learning - 推理时间短的分类模型
- php - 如何进行批量操作以将文件复制到谷歌驱动器,php?
- python-3.x - 在使用 Pandas Dataframe 生成的 CSV 中添加自定义页眉和页脚
- server - 将主 OPC UA 服务器连接到辅助 OPC UA 服务器
- amazon-web-services - 如何将 AWS Shield Advance 保护添加到我的堆栈?