#javascript #node.js #reactjs #mern
Вопрос:
Я хочу этого «item.id» ценность в «details.js» файл. «item.id» исходит от «application.js» файл.
Вот кодекс «application.js» :
import React from "react";
import axios from "axios";
import { useEffect, useState } from "react";
import Table from "@material-ui/core/Table";
import { useHistory } from "react-router-dom";
import TableCell from "@material-ui/core/TableCell";
import { Button, TableHead, TableRow } from "@material-ui/core";
import { TableBody } from "@material-ui/core";
const PendingApplication = () => {
let history = useHistory();
const [data, setData] = useState([]);
const handleClick = (location) => {
console.log(location);
history.push(location);
};
useEffect(() => {
axios
.get("http://localhost:5000/api/kam")
.then((response) => {
console.log(response);
setData(response.data.kamData);
})
.catch((error) => {
console.log(error);
});
}, []);
return (
<div className="content">
<Table>
<TableHead>
<TableRow>
<TableCell>Ticket No</TableCell>
<TableCell align="right">Category</TableCell>
<TableCell align="right">Sub Category</TableCell>
<TableCell align="right">Request Time amp; Date</TableCell>
<TableCell align="right">Company Name</TableCell>
<TableCell align="right">Action</TableCell>
</TableRow>
</TableHead>
<TableBody>
{data.map((item, index) => (
<TableRow key={index}>
<TableCell>{item.ticketno}</TableCell>
<TableCell>{item.approvecategory}</TableCell>
<TableCell>{item.subcategory}</TableCell>
<TableCell>{item.date}</TableCell>
<TableCell>{item.companyname}</TableCell>
<TableCell>
<Button onClick={() => handleClick("/detail", `${item._id}`)}>
Detail
</Button>
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</div>
);
};
export default PendingApplication;
И это кодекс «detail.js» :
import React from "react";
import axios from "axios";
import { useEffect, useState, useContext } from "react";
import { useHistory, useParams } from "react-router-dom";
import Box from "@mui/material/Box";
import { SetPopupContext } from "../../App";
import { Button, TableRow } from "@material-ui/core";
const Details = () => {
const { _id } = useParams();
const [buttonText, setButtonText] = useState("APPROVE");
const changeText = (text) => setButtonText(text);
const setPopup = useContext(SetPopupContext);
let history = useHistory();
const [data, setData] = useState([]);
useEffect(() => {
axios
.get(`http://localhost:5000/api/kam/${_id}`)
.then((response) => {
console.log(response);
setData(response.data.kamData);
})
.catch((error) => {
console.log(error);
});
}, []);
return (
<div className="content">
<Button onClick={() => changeText("APPROVED")}>{buttonText}</Button>
<Button>Revert Back</Button>
<Button>Reject</Button>
<Box
sx={{
width: "90%",
padding: "24px 20px", // theme padding
border: "1px solid rgba(0, 0, 0, 0.12)",
borderRadius: 4,
}}
>
<div className="ticket-details">
<h3>TICKET DETAILS</h3>
<TableRow>
<p>Ticket ID: {data.ticketno}</p>
<p>Category: {data.approvecategory}</p>
<p>Category: {data.subcategory}</p>
<p>Category: {data.date}</p>
</TableRow>
</div>
<div className="additional-info">
<h3>ADDITONAL INFO</h3>
<TableRow>
<p>Company Name: {data.companyname}</p>
<p>KCP Name: {data.kcpname}</p>
<p>KCP Contact No: {data.kcpcontact}</p>
<p>KCP NID No: {data.kcpnid}</p>
<p>No of MSISDN: {data.msisdn}</p>
</TableRow>
</div>
</Box>
</div>
);
};
export default Details;
В основном в «application.js» файл Я извлекаю все данные и показываю эти данные в таблице, когда пользователь нажимает кнопку «подробно», она должна содержать значение «item._id» и перенаправлять на «detail.js» файл. В «detail.js» файл У меня есть «axios .get( http://localhost:5000/api/kam/${_id}
)» это API, который я создал в бэкэнде. Мне нужны данные по определенному идентификатору, конкретный идентификатор исходит от «application.js» файл.
Вот API для извлечения данных по идентификатору:
router.get("/kam/:id", (req, res) => {
console.log(req.params.id);
kamForm
.findById(req.params.id)
.then((result) => {
res.status(200).json({
kamData: result,
});
})
.catch((err) => {
console.log(err);
res.status(500).json({
message: err,
});
});
});
Я застрял с этой проблемой в течение последних трех дней, кто-нибудь может это исправить?
Ответ №1:
ваша handleClick(location)
функция принимает только один параметр, поэтому ее следует вызывать следующим образом
<Button onClick={() => handleClick(`/detail/${item.id}`)}>
Detail
</Button>
Комментарии:
1. Это происходит ошибка 404
Ответ №2:
вы не читаете идентификатор в обратном вызове handleClick
В application.js —
const handleClick = (location,id) => {
history.push({
pathname: '/location',
search: '?_id=id'
})
};
Комментарии:
1. Это происходит ошибка 404
2. Можете ли вы прочитать идентификационный параметр в detail.js?
3. Нет, я не могу прочитать удостоверение личности в «detail.js». Но в URL-адресе это будет » localhost:3000/местоположение? _id=id » этот адрес и страница с ошибкой 404.
4. Предполагая, что вы используете react-маршрутизатор. Пожалуйста, проверьте, правильно ли он определен, например: — компонент={Страница сведений} />
5. Теперь он перенаправляется на страницу сведений, но после элемента JSX данных нет.