#reactjs
Вопрос:
Я новичок в реагировании и пытаюсь передать идентификатор от компонента к другому компоненту. Для этого я использовал
<a className="btn btn-view" href={`/buyer/viewpostdetails/${posts._id}`}>View Post <i className="fas fa-angle-double-right"></i></a>
этот код. Он работает правильно и правильно отображает URL-адрес с идентификатором.
Затем я попытался получить это удостоверение личности
componentDidMount(){
const id = this.props.match.params.id;
axios.get(`/post/${id}`).then((res) => {
if (res.data.success) {
this.setState({
post:res.data.post
});
console.log(this.state.post);
}
});
}
Я использовал приведенный выше код, чтобы сделать это, но я получил ошибку
Ошибка типа: Не удается прочитать параметры свойства неопределенного
Как мне решить эту проблему?
Комментарии:
1. Это простая ссылка? Как ты думаешь
this.props.match.params.id
, что это такое? Ты пользуешьсяreact-router
?2. @ZsoltMeszaros это URL-адрес, который я получил » localhost:3000/buyer/viewpostdetails/60f7d7fbd89c5a1470919a24 «. Я хочу ввести этот идентификатор в указанную выше переменную идентификатора. Вот почему я использовал это «this.props.match.params.id».
3. Можете ли вы показать остальную часть соответствующего кода?
4. @йохананшайнбергер это код, который я использовал для этого
constructor(props){ super(props); this.state={ post:{} }; } componentDidMount(){ const id = this.props.match.params.id; axios.get(
/post/${id}).then((res) => { if (res.data.success) { this.setState({ post:res.data.post }); console.log(this.state.post); } }); }
Ответ №1:
import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";
import { useEffect, useState } from "react";
// import axios from "axios";
export default function App() {
return (
<div className="App">
<Router>
<Switch>
<Route path="/" component={FirstPage} exact />
<Route path="/:id" component={SecondPage} />
</Switch>
</Router>
</div>
);
}
function FirstPage() {
const [post, setPost] = useState({ _id: 5 });
return (
<div>
<div>First Page</div>
<Link to={`/${post._id}`}>Link</Link>
</div>
);
}
function SecondPage(props) {
const [state, setState] = useState();
useEffect(() => {
const id = props.match.params.id;
setState(id);
// axios.get(`/post/${id}`).then((res) => {
// if (res.data.success) {
// setState(res.data.post);
// }
// });
}, []);
return <div>SecondPage id: {state}</div>;
}
Вы должны сделать что-то подобное.
Сначала вы определяете маршрутизатор.
Затем вы можете получить доступ к идентификатору с соответствующей страницы или компонента.
И я предлагаю вам определить компоненты как функции и использовать крючки useEffect и useState.
Комментарии:
1. Большое спасибо, @ibrahimAKIN. Я ценю вашу помощь!