Есть ли способ передавать информацию между страницами в Reactjs с помощью navlink?

Я использую REST-фреймворк Django, храня данные в модели.

Затем я использую Reactjs для потребления API и выполнения GET/POST запросов.

<

Я хочу иметь возможность щелкнуть на определенной ссылке, но затем также передать информацию компоненту, на который направлена ссылка.

Это мой код index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter } from 'react-router-dom';

ReactDOM.render(
    <BrowserRouter>
      <App/>
    </BrowserRouter>,
  document.getElementById('root')
);

Это мой код App.js

import './App.css';
import Container from '@material-ui/core/Container';
import Navigation from './Components/ToolBar'
import Main from './Components/Main'

function App() {

  return (
    <>
      <Container maxWidth='lg' className="App">
        <Navigation/>
        <Main/>
      </Container>
    </>
  )
}

export default App;

Это мой код Main.js

import { Switch, Route } from 'react-router-dom';
import Projects from './Projects';
import Tickets from './Tickets';

const Main = () => (
    <Switch>
      <Route exact path='/projects' component={Projects}></Route>
      <Route exact path='/tickets' component={Tickets}></Route>
    </Switch>
  );

  export default Main;

Это мой код Toolbar.js, который используется для навигации по различным страницам

import { Button } from '@material-ui/core'
import AppBar from '@material-ui/core/AppBar'
import Toolbar from '@material-ui/core/Toolbar'
import { NavLink } from 'react-router-dom'

const Navigation = () => {

    return (
        <AppBar color='primary'>
            <Toolbar>
                <Button><NavLink to='/projects'>Projects</NavLink></Button>
                <Button><NavLink to='/tickets'>All Tickets</NavLink></Button>
            </Toolbar>
        </AppBar>
    )
}


export default Navigation

А это мой код Projects.js

import React, { useState, useEffect} from 'react'

function Projects() {

  const [data, setData] = useState(null);

  useEffect(() => {
    fetch('http://localhost:8000/api/projects/')
      .then(res => res.json())
      .then(setData)
      .catch(console.error);
  }, []);

  if (data) {
    const projects = [...new Set(data.map(item => item.project_code))];

    return (

        <div>
          <h3>These are the current projects</h3>
            {projects.map(item => (
              <p>{item}</p>
            ))}
        </div>
    );
  }
  return null;
}

export default Projects;

В основном я хочу добиться следующего: в коде Project.js строку <p>{item}</p> я хочу изменить на кликабельную ссылку. Когда эта ссылка нажимается, она должна перенести меня на новую страницу, где показаны все тикеты, только связанные с этим конкретным проектом, и она должна использовать переменную project_code (для этого конкретного проекта) для отправки запроса к API. После того, как API получит код проекта, он отправит обратно только билеты для этого конкретного проекта.

Моя проблема заключается в передаче этого project_code со "страницы" Projects на новую страницу, где я могу использовать этот project_code для отправки его в API

В вашем конкретном случае, я думаю, вложенные маршруты будут лучшим вариантом. Посмотрите этот пример, чтобы увидеть, как вы можете добавить его в свою логику.

Сделав это, вы получите маршруты, выглядящие следующим образом:

   /project/:projectId // for your project main route
   /project/:projectId/:ticketId // to access a particular ticket

Это также позволит вам отобразить что-то вроде Меню, где вы сможете увидеть все ваши проекты/билеты и свободно перемещаться по ним.

Вернуться на верх