reactjs - 使用 react-router 导航到具体的子节点
问题描述
我想通过按下链接导航到一个具体的孩子,如“/annotations/1”、“/annotations/12”,但我不知道如何发送 id 以从 Child 组件中的 API 获取。
我一直在尝试使用 Link to="/annotationsView" 但我无法获得我点击的注释的具体 ID。我想单击注释的名称并转到 /annotationView/{annotation ID} 但我不知道如何将链接发送到 AnnotationView 组件以便从 API 获取数据。
return(
<div>
<h2>Anotaciones</h2>
<div className="form-group">
<input type="date"/>
</div>
<Table>
{annotations.map((ann) =>
<div>
<tr>
<Link to="/annotationView" id={ann.id}>
<th>{ann.name}</th>
</Link>
</tr>
<tr>
<td>{ann.text}</td>
</tr>
</div>
)}
</Table>
</div>
)
class AnnotationView extends Component {
constructor(props) {
super(props);
this.state = {
annotation: [],
isLoading: false
}
}
componentDidMount() {
this.setState({isLoading: true});
console.log(this.props.id);
fetch("http://localhost:8080/annotations/" + this.props.params.id)
.then(response => response.json())
.then(data => this.setState({annotation: data, isLoading: false}));
}
render() {
const { annotation, isLoading } = this.state;
if(isLoading) {
return <p>Loading...</p>;
}
return(
<div>
<h2>Anotacion: { annotation.id }</h2>
<p>Título: { annotation.name }</p>
<p>Descripción: { annotation.text } </p>
</div>
)
}
}
你能解释一下如何在 Link 组件中发送 id 或其他方式吗?
先感谢您。
解决方案
下面是一个如何在 url 中传递参数的示例:
import React from 'react';
import { render } from 'react-dom';
import { BrowserRouter, Route, Switch } from 'react-router-dom'
const Item = ({ match }) => {
const { id } = match.params;
return <h1>Item {id}</h1>
}
const App = () => {
return (
<BrowserRouter>
<Switch>
<Route path="/:id" component={Item} />
</Switch>
</BrowserRouter>
)
}
render(<App />, document.getElementById('root'));
例如,前往/2
将显示Item 2
.
现场示例在这里。
推荐阅读
- html - 文本区域对齐
- google-apps-script - 使用 setNumberFormat 将数字格式化为货币
- visual-studio - 断点无法在一个项目中绑定,但在另一个项目中没有
- oracle - {INS-08101] 数据库配置助手
- amazon-web-services - 通过 redshift-data api 在 AWS Redshift 中创建表
- javascript - 如何从包含线性渐变定义的字符串中提取颜色停止值?
- node.js - Jest + Mongoose: Have to run find twice to get results
- javascript - Getting numerical elements from Odometer syntax in Cypress
- php - Laravel 8 - Decrypt cookies
- bash - Does `pgrep` have a way to exclude child processes?