Конфигурация маршрута
Если вам нужно получить доступ к параметрам маршрута, сначала установите маршрут для принятия параметра. В вашем случае идентификатор - это все, что нужно. Ниже вы можете увидеть измененную конфигурацию маршрутизации. /challengedetail
был обновлен до /challengedetail/:id
.
function App() {
return (
<div className="App">
<Switch>
<Route exact path="/" component={Home} />
<Route path="/signup" component={Signup} />
<Route path="/login" component={Login} />
<Route path="/profile" component={Profile} />
<Route path="/allchallenges" component={Allchallenges} />
<Route path="/friends" component={Friends} />
<Route path="/startchallenge" component={Startchallenge} />
<Route path="/challengedetail/:id" component={Challengedetail} />
<Route path="/about" component={About} />
<Route path="/todo" component={Todo} />
</Switch>
</div>
);
}
Доступ к параметрам маршрута
Теперь с указанной выше конфигурацией компонент Challengedetail
может проверить, находится ли route отправлено значение, соответствующее :id
. Вы можете сделать это, обратившись к реквизитам и проверив объект match
.
Пример:
class Challengedetail extends React.Component {
// constructor...
componentDidMount(){
// get id from url
const challengeId = this.props.match.params.id;
axios({
method: "GET",
url: `${process.env.REACT_APP_API_BASE}/challengedetail/${challengeId}`,
withCredentials: true
})
.then(response => {
console.log(response.data)
this.setState({
title: response.data.title,
description: response.data.description
})
})
.catch(error => {
console.log("Charles this is an error: ", error)
})
}
// render...
}
С этим logi c при монтировании компонента вы извлекаете идентификатор из URL-адреса, а затем вызывает сервер, чтобы получить нужные данные.
Ошибки сервера
Итак, я только что понял, что вы обновили вопрос ... Я не Не думаю, что вы правильно настроили свое приложение в отношении REACT_APP_API_BASE
. Вам необходимо иметь .env
в папке root и создать значение REACT_APP_API_BASE
.
Пример:
REACT_APP_API_BASE=http://localhost:4000
Помните, что пользовательский интерфейс и Backend будут работать на разных портах, поэтому вам также нужны разные порты на localhost. 4000 - это просто пример в этом случае, убедитесь, что ваш Backend и UI - разные порты, я предполагаю, что у вас есть UI и Backend на одном и том же порту - это не сработает.
Посмотрите здесь, чтобы увидеть, как настроить вашу конфигурацию: https://create-react-app.dev/docs/adding-custom-environment-variables/.