I am new using react and i have a small app to build , i have done the backend RestApi and now i started to build the frontend using react here is some of the code of the frontend
App.js:
import React, { useState, useEffect } from 'react';
import { BrowserRouter, Route, Routes, useNavigate } from 'react-router-dom';
import Navbar from './components/Navbar';
import ProductTypeList from './components/ProductTypeList';
import ProductTypeForm from './components/ProductTypeForm';
import ProductList from './components/ProductList';
import ProductForm from './components/ProductForm';
import axios from 'axios';
function App() {
const navigate = useNavigate();
const handleButtonClick = () => {
navigate('/product-types');
};
const [productTypes, setProductTypes] = useState([]);
const [products, setProducts] = useState([]);
useEffect(() => {
axios.get('http://localhost:3001/product-types')
.then(res => setProductTypes(res.data))
.catch(err => console.log(err));
axios.get('http://localhost:3001/products')
.then(res => setProducts(res.data))
.catch(err => console.log(err));
}, []);
const handleAddProductType = (newProductType) => {
setProductTypes([...productTypes, newProductType]);
};
const handleUpdateProductType = (updatedProductType) => {
const updatedProductTypes = productTypes.map(productType => {
if (productType.id === updatedProductType.id) {
return updatedProductType;
}
return productType;
});
setProductTypes(updatedProductTypes);
};
const handleDeleteProductType = (deletedProductTypeId) => {
axios.delete(`http://localhost:3001/product-types/${deletedProductTypeId}`)
.then(() => {
const updatedProductTypes = productTypes.filter(productType => productType.id !== deletedProductTypeId);
setProductTypes(updatedProductTypes);
})
.catch(err => console.log(err));
};
const handleAddProduct = (newProduct) => {
setProducts([...products, newProduct]);
};
const handleUpdateProduct = (updatedProduct) => {
const updatedProducts = products.map(product => {
if (product.id === updatedProduct.id) {
return updatedProduct;
}
return product;
});
setProducts(updatedProducts);
};
const handleDeleteProduct = (deletedProductId) => {
axios.delete(`http://localhost:3001/products/${deletedProductId}`)
.then(() => {
const updatedProducts = products.filter(product => product.id !== deletedProductId);
setProducts(updatedProducts);
})
.catch(err => console.log(err));
};
return (
<BrowserRouter>
<div className="container">
<Navbar />
<Routes>
<Route path="/" element={<h1>Welcome to the Product Manager</h1>} />
<Route path="/product-types" element={
<>
<ProductTypeList productTypes={productTypes} onDeleteProductType={handleDeleteProductType} />
<ProductTypeForm onAddProductType={handleAddProductType} />
</>
} />
<Route path="/product-types/:id" element={<ProductTypeForm productTypes={productTypes} onUpdateProductType={handleUpdateProductType} />} />
<Route path="/products" element={
<>
<ProductList products={products} onDeleteProduct={handleDeleteProduct} />
<ProductForm productTypes={productTypes} onAddProduct={handleAddProduct} />
</>
} />
<Route path="/products/:id" element={<ProductForm productTypes={productTypes} onUpdateProduct={handleUpdateProduct} />} />
</Routes>
<button onClick={handleButtonClick}>Go to Product Types</button>
</div>
</BrowserRouter>
);
}
export default App;
and index.js:
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter as Router } from 'react-router-dom';
ReactDOM.render(
<Router>
<App />
</Router>,
document.getElementById('root')
);
reportWebVitals();
and after starting the app using npm start nothing show on the screen and i get this error on the console :
caught Error: You cannot render a <Router> inside another <Router>.
You should never have more than one in your app.
How can i fix this error ?