песочница
Извлечение данных из Dashboard
это даст нам возможность искать их по id, когда Lease
компонент монтируется
Вы можете заменить егос вызовом API, когда вы реализуете бэкэнд
const data = [
{
id: 1,
address: "18291 Rainbow Dr, Cool Springs CA 93102",
monthlyRent: 4300
},
{
id: 2,
address: "2200 Stiller Dr, Las Vegas NV 96274",
monthlyRent: 1500
},
{
id: 3,
address: "21626 Sleepy Hollow Ct, Walnut CA 91763",
monthlyRent: 2400
}
];
Извлекает leaseId из match.params.leaseId
и ищет его, когда компонент монтируется, используя useEffect
с leaseId
в качестве зависимости
Когда у вас есть готовый API, вы можете просто заменить data.find
вызовом API на leaseId
. Причина, по которой я ищу его при монтировании, заключается в том, что он даст намвозможность сразу перейти по URL-адресу без необходимости проходить через панель мониторинга для загрузки данных
const Lease = ({
match: {
params: { leaseId }
}
}) => {
const [leaseData, setLeaseData] = useState(null);
useEffect(() => {
setLeaseData(data.find(d => d.id.toString() === leaseId));
}, [leaseId]);
if (!leaseData) return null;
return (
<div>
<h1>{leaseData.id}</h1>
<p>{leaseData.address}</p>
<p>{leaseData.monthlyRent}</p>
</div>
);
};
Когда URL-адрес равен /dashboard
, используйте команду render для рендеринга основного Dashboard
и создания Route
путь к leaseId
const Dashboard = ({ match: { url } }) => {
const linkList = data.map(lease => {
return (
<li key={lease.id}>
<Link to={`${url}/${lease.id}`}>
<img
src="https://cdn.edinarealty.com/media/2256/homepage-tiles_new-construction.jpg"
alt="HTML5 Icon"
/>
</Link>
</li>
);
});
return (
<Switch>
<Route
exact
path={url}
render={() => (
<div>
MAIN DASHBOARD
<ul>{linkList}</ul>
</div>
)}
/>
<Route path={`${url}/:leaseId`} component={Lease} />
</Switch>
);
};
const Home = () => (
<div>
<Link to="/dashboard">Dashboard</Link>
</div>
);
const App = () => (
<Router>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/dashboard" component={Dashboard} />
</Switch>
</Router>
);