Как выбрать текст для копирования без запуска события клика в reactjs

Я использую реагирующую таблицу. Я определил функцию onRowClick() для столбца. Здесь выберите текст, чтобы выделить текст, а нажатие должно перенаправить на другую страницу. Теперь, когда я пытаюсь выделить текст, он перенаправляется. Как выбрать текст, не вызывая событие клика?

Ниже приведена моя функция onRowClick:

onRowClick = (state, rowInfo, columnInfo) => {
  return {
    onClick: (e, handleOriginal) => {
      if (columnInfo.id) {
        this.props.history.push(`/downloads/${rowInfo.original.id}`);
      } else if (handleOriginal) {
        handleOriginal();
      }
    }
  };
}

Ниже приведен мой компонент таблицы реакций:

<ReactTable
  manual
  getTdProps = {this.onRowClick}
  data = {results}
  onFetchData = {this.onFetchData}
  sortable = {false}
  showPagination = {false}
  noDataText = 'no data found'
  columns = {[
   {
     Header: 'Id',
     maxWidth: 50,
     accessor: "id",
     Cell: (props) => <span className = "btn-link pointer">{props.value} </span>
   },
   {
     Header: 'Processed on',
     maxWidth: 165,
     accessor: "created_at",
     Cell: (props) => <span> {this.getDateTime(props.value)} </span>
   }
  ]
/>

Щелчок по столбцу id должен перенаправить на страницу сведений. При выборе текста следует выбрать текст идентификатора.

Можете ли вы опубликовать часть кода компонента?

Chris Ngo 28.06.2019 07:53

Привет, Кристофер, я обновил свой вопрос.

Beu 28.06.2019 07:58

@Beu Пожалуйста, добавьте код JSX

Randall 28.06.2019 08:10

привет .. Я только что снова обновил свой вопрос, реагируя на комментарий

Beu 28.06.2019 08:19

Привет, поскольку вы использовали здесь событие onClick, оно будет перенаправлено, поэтому вы ничего не сможете с этим сделать, но если вы измените событие onClick на onDoubleClick, тогда, если вы щелкнете два раза, оно будет перенаправлено, а не в одном нажмите. Надеюсь, это может быть полезно для вас.

AddWeb Solution Pvt Ltd 28.06.2019 08:46

Возможный дубликат Предотвратить событие onClick при выборе текста

skyboyer 28.06.2019 09:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
7
6
2 032
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что onclick нельзя предотвратить, но желаемый результат можно получить, используя метод Окно.getSelection().

The Window.getSelection() method returns a Selection object representing the range of text selected by the user or the current position of the caret.

Используя этот метод, вы можете получить выделенный текст, а затем вычислить его длину следующим образом:

window.getSelection().toString()

И затем вы можете изменить свой метод onRowClick, как указано ниже:

onRowClick = (state, rowInfo, columnInfo) => {
    return {
        onClick: (e, handleOriginal) => {
            let selection = window.getSelection().toString();
            if (selection.length <= 0) {
                if (columnInfo.id && selection.length > 0) {
                    console.info("columnInfo.id", columnInfo.id);
                    this.props.history.push(`/downloads/${rowInfo.original.id}`);
                } else if (handleOriginal) {
                    handleOriginal();
                    console.info("columnInfo.id", "nothing");
                }
            }
        }
    };
};

Я создал файл рабочая демонстрация.

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