Как передать Props другому компоненту с помощью React-Router Redirect

У меня есть чистое приложение React (без контейнера внешнего состояния), в котором я использую react-router. В этом приложении у меня есть компонент <SearchMain />, который содержит двух дочерних компонентов, компонент <Search />, в основном форму, содержащую элементы для выполнения поиска, и компонент <DisplayResults />, который отображает результаты в табличной форме.

Внутри компонента <Search /> у меня есть две кнопки, одна используется для отображения данных в табличной форме, а другая - для отображения данных в календарной форме. События onClick двух кнопок связаны с родительским компонентом <Search /> с помощью двух стрелочных функций, переданных как props, updateTableData и handleShowCalendar.

Обе функции выполняют поиск и сохраняют результат в this.state.searchResults. updateTableData показывает результаты в компоненте <DisplayResults />, handleShowCalendar хочет показать результаты в календаре из другого компонента <DisplayCalendar />, связанного с маршрутом '/ displayCalendar'. Я хотел бы использовать декларативный компонент <Redirect /> вместо использования history.push(). В приведенном ниже решении я могу отправлять данные через строку запроса URL-адреса, но это не то решение, которое я ищу, я хотел бы передавать такие данные так же, как реквизиты передаются от родительских компонентов к дочерним. Я поискал информацию в Интернете, но не смог найти решения своей проблемы. Самое близкое, что я нашел, - это использовать

<Route
  path='/displayCalendar'
  render = {(props) => <DisplayCalendar {...props} searchResults = {this.state.searchResults} />}
/>

но как я могу программно изменить <Route /> и передать состояние моего компонента нажатием кнопки с помощью <Redirect />?

export class SearchMain extends React.Component<RouteComponentProps<{}>, State> {

    constructor(props: any)
    {
        super(props);

        this.state = {...};
        ...
    }
        ...
    updateTableData(searchParams: SearchParameters) {
          this.makeRequest(searchParams);
    }

    handleShowCalendar(searchParams: SearchParameters) {
        this.makeRequest(searchParams);
        this.setState({
            ...this.state,
            redirectToCalendar: true
        });
    }

    public render() {
        const { loading, showCalendar, redirectToCalendar, searchResults } = this.state;

        if (redirectToCalendar)
            return (<Redirect to = {{
                pathname: '/displayCalendar',
                search: JSON.stringify(this.state.searchResults)
            }} />)

        return (<div>
            <Row>
                <Search search = {(searchParams) => 
                  this.updateTableData(searchParams)} showCalendar = {(searchParams) => this.handleShowCalendar(searchParams)} />
                {searchResults && <DisplayResults searchResults = {searchResults} /> }
                </Row>
           </div>);
    }

Проверьте stackoverflow.com/questions/44121069/… и stackoverflow.com/questions/44127739/…

Shubham Khatri 30.04.2018 11:51

Возможный дубликат Как передать параметры с помощью history.push в react-router v4?

Striped 30.04.2018 13:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
1 204
0

Другие вопросы по теме