#reactjs #react-router
#reactjs #реагировать-маршрутизатор
Вопрос:
У меня есть несколько компонентов. Основным компонентом являетсяPageTemplate.js , который описывает меню, панель поиска и заголовок сайта. А также место в центре для содержимого других страниц (функциональные компоненты react). Идея состоит в том, чтобы использовать шаблон(PageTemplate.js ) на всех страницах сайта, поскольку есть только одна. И генерировать блок с содержимым из других компонентов (страниц, например.EditRecord.js , NewRecord.js и т.д.).
Я использую react-router и, например, при переходе в / EditRecord, мой блок содержимого отображал страницу редактирования (EditRecord.js ) там
Теперь я сделал это примерно так:
Переходы страниц работают, и блок содержимого генерирует нужную мне страницу.
но у меня огромная проблема. Например, есть страница с таблицей с данными(MainPage.js ). А поиск и функция поиска расположены в шаблоне(PageTemplate.js ). Как я могу передать состояние из шаблона(PageTemplate.js ) на страницу(MainPage.js ) чтобы изменить таблицу данных там по значению поиска из шаблона? А также, если я, например, буду находиться на другой странице (пример в /newRecord) и вызову функцию поиска в PageTemplate, то как я могу сообщить react, что теперь необходимо нарисовать главную страницу (/) MainPage с новыми данными по результатам поиска?
Большое спасибо всем заранее;)
код маршрутизатора:
import { Main} from './pages/MainPage/Main';
import { EditRecordPage } from './pages/EditRecordPage/EditRecordPage';
import { NewRecord } from './pages/NewRecordPage/NewRecord';
export const routes = [
{
path: '/',
exact: true,
component: Main,
},
{
path: '/EditRecord/:id',
exact: true,
component: EditRecordPage,
},
{
path: '/NewRecord/',
exact: true,
component: NewRecord,
}
];
Закодируйте одну из страниц (они идентичны, за исключением названия):
import React, { useState, useEffect } from 'react';
import { PageTemplate } from '../../components/PageTemplate';
import { MainPage } from './MainPage';
export const Main = (props) => {
return (
<PageTemplate title={'Main page'} {...props}><MainPage/></PageTemplate>
)
}
Вот фрагмент рендеринга PageTemplate.js где отображается страница (главная, редактировать и т.д.):
<Content
className="site-layout-background"
style={{
padding: 24,
margin: 0,
minHeight: 280,
}
>
<div {...props}/>//here is the required page(main, edit, new etc)
</Content>
Комментарии:
1. по сути, вы хотите передавать данные по различным маршрутам, верно?
2. @PrateekThapa В зависимости от маршрута я хочу изменить содержимое блока <Content> в отдельном компоненте PageTemplate(exNewRecord.js ) загружается туда. Теперь это работает. Например, когда я переключаюсь на /newRecord, я получаю NewRecord.js содержимое в блоке. Основная проблема. например, поиск и searchfunction описаны в PageTemplate.js но отображение информации на главной странице, как я могу передать значение поиска из PageTemplate на главную страницу? Если, например, я остаюсь не на главной странице, а, например, на newRecord, то как я могу отобразить страницу результатов поиска (MainPage), нажав поиск?