#javascript #reactjs #react-router #components #react-router-dom
Вопрос:
Я пытаюсь прочитать код, но он возвращается неопределенным. Я хочу прочитать код с маршрута и отобразить его в теге h3.
Маршрут
<Router>
<Routes>
<Route path="/" element={<p>Homepage</p>} />
<Route path="/join" element={JoinRoomPage()} />
<Route path="/create" element={CreateRoomPage()} />
This is the roomCode i want to read in the Room Component
<Route path="/room/:roomCode" element={Room()} />
</Routes>
</Router>
Компонент Помещения
import React, { useState, useEffect } from "react";
import { useParams } from "react-router-dom";
export default function Room(props) {
const [room, setRoom] = useState({
votesToSkip: 2,
guestCanPause: true,
isHost: false,
});
let { roomCode } = useParams();
return (
<div>
<h3>{roomCode}</h3>
<p>Votes: {room.votesToSkip}</p>
<p>Guest Can Pause: {room.guestCanPause}</p>
<p>Host: {room.isHost}</p>
</div>
);
}
Заранее спасибо
Ответ №1:
Компоненты маршрута должны передаваться как JSX, а не как вызываемая функция.
<Router>
<Routes>
<Route path="/" element={<p>Homepage</p>} />
<Route path="/join" element={<JoinRoomPage />} />
<Route path="/create" element={<CreateRoomPage />} />
<Route path="/room/:roomCode" element={<Room />} />
</Routes>
</Router>
Комментарии:
1. Большое спасибо за вашу помощь.
Ответ №2:
Маршрутизатор
<Router>
<Routes>
<Route path="/" element={<p>Homepage</p>} />
<Route path="/join" element={JoinRoomPage()} />
<Route path="/create" element={CreateRoomPage()} />
This is the roomCode i want to read in the Room Component
<Route path="/room/:roomCode" element={<Room />} />
</Routes>
</Router>
Компонент Помещения
import { useState, useEffect } from "react";
import { useParams } from "react-router-dom";
const Room = (props) => {
let { roomCode } = useParams();
const [room, setRoom] = useState({
votesToSkip: 2,
guestCanPause: true,
isHost: false,
});
return (
<div>
<h3>{roomCode}</h3>
<p>Votes: {room.votesToSkip}</p>
<p>Guest Can Pause: {room.guestCanPause}</p>
<p>Host: {room.isHost}</p>
</div>
);
}
export default Room;