Перенаправить с помощью React-router-dom и response-table. - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь сделать перенаправление внутри функции onclick в React-таблице. Когда вы смотрите на onRowClick, он записывает имя заголовка, который работает отлично. Но когда я пытаюсь использовать редирект после щелчка, ничего не происходит. Код работает после того, как я попробовал его в другом компоненте. Мне интересно, если это проблема с реакцией таблицы и есть ли другой способ сделать это?

То, что я пытаюсь сделать - это перенаправить по маршруту с подключенным компонентом информации о пациенте.

import React, { Component } from 'react';
import { highRiskPatientData } from     '.././dummydata/HighRiskPatientComp';
import '.././styles/HighRiskPatientComp.css';
import ReactTable from 'react-table/lib';
import "react-table/react-table.css";
import "babel-polyfill";
import PatientInfo from './PatientInfo';
import { Redirect } from 'react-router-dom';


class HighRiskPatientComponent extends Component {
  // constructor() {
  //   super();

  // }

  render() {
    const onRowClick = (state, rowInfo, column, instance) => {
      return {
          onClick: e => {
              console.log('It was in this column:', column.Header);
              <Redirect to="/patientinfo"/>
            }
      }
  }
    return (
  <div className="container-fluid">
    <div className="row">
      <div className="col-md-6 HighRiskHeaderDiv">
        <h5 className="HighRiskHeader">High Risk Patients</h5>
          </div>
          <div className="col-md-6 btnSettingsDiv">
            <button type="button" className="btn btnSettings"         
 value="Submit">Settings</button>
          </div>
        </div>

    <ReactTable
      data={highRiskPatientData.data}
      columns={[
             {

               columns: [
                 {
                   Header: "Name",
                   accessor: "name"
                 },
                 {
                   Header: "Current PRF Status",
                   accessor: "currentPRFStatus"
                 },
                 {
                   Header: "Review On",
                   accessor: "reviewOn"
                 },
                 {
                   Header: "Due/Overdue",
                   accessor: "DueOverdue"
                 },
                 {
                   Header: "Facility",
                   accessor: "Facility"
                 },
                 {
                   Header: "Last Discharge",
                   accessor: "lastDischarge"
                 },
                 {
                   Header: "Last MHA Appt",
                   accessor: "lastMHAppt"
                 },
                 {
                   Header: "Next MHA Appt",
                   accessor: "nextMHAppt"
                 },
                 {
                   Header: "On Track",
                   accessor: "onTrack"
                 },
                 {
                   Header: "Last Safety Plan",
                   accessor: "lastSafetyPlan"
                 },
                 {
                   Header: "Done in 7 Days",
                   accessor: "doneIn7Days"
                 },
                 {
                   Header: "Last Compreh. Risk Assess",
                   accessor: "lastCompRiskAssess"
                 },
                 {
                   Header: "PHQ-9 Score",
                   accessor: "phqDash9Score"
                 },
                 {
                   Header: "PHQ-9 date",
                   accessor: "phqDash9Score"
                 },
                 {
                   Header: "Trend",
                   accessor: "trend"
                 }
               ]
             }
           ]}
      defaultPageSize={8}
      className="-highlight"
      getTdProps={onRowClick}
        />
      </div>
    );
  }
}

export default HighRiskPatientComponent;

Ответы [ 2 ]

0 голосов
/ 16 июля 2019

Для этого есть 2 варианта:

Использование объекта истории

onClick: e => {
    console.log('It was in this column:', column.Header);
    this.props.history.push("/patientinfo");
}

Использование компонента перенаправления .Если вы хотите использовать компонент redirect, вам нужно включить его в функцию render, а не в метод onClick, как вы реализовали.Но для того, чтобы узнать, когда его визуализировать (чтобы фактически перенаправить), вам нужно изменить свое состояние, когда вы щелкаете по строке следующим образом:

onClick: e => {
    console.log('It was in this column:', column.Header);
    this.setState({ navigatePatientInfo: true });
}

А затем в вашем методе визуализации:

render() {
    if (this.state.navigatePatientInfo) {
        return <Redirect to="/patientinfo"/>
    }

    // .. your code
}
0 голосов
/ 16 июля 2019

Я потерял время, чтобы разобраться. Мой ответ основан на этом ответе. Я не знаю, является ли это лучшим решением, но я использую SubComponent и использовал там Redirect. Не забывайте функцию "expand_row" и "extended = {this.state.expanded}".

getTdProps={(state, rowInfo) => {
        return {
          onClick: e => {
            this.expand_row(rowInfo);
          }
        };
      }}
      SubComponent={d => {
        return (
          <div>
            <Redirect
              to={{
                pathname: "transaction",
                accountId: d.original._id
              }}
            />
          </div>
        );
      }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...