Отображение ссылки на организацию, что это значит

Обновлено: 21.11.2024

Ссылки предоставляют способ доступа к узлам DOM или элементам React, созданным в методе рендеринга.

В типичном потоке данных React реквизиты — единственный способ взаимодействия родительских компонентов со своими дочерними. Чтобы изменить дочерний элемент, вы повторно визуализируете его с новыми реквизитами. Однако есть несколько случаев, когда вам необходимо обязательно изменить дочерний элемент за пределами типичного потока данных. Дочерний элемент, который нужно изменить, может быть экземпляром компонента React или элементом DOM. В обоих этих случаях React предоставляет запасной выход.

Когда использовать ссылки

Есть несколько хороших вариантов использования ссылок:

  • Управление фокусом, выделением текста или воспроизведением мультимедиа.
  • Запуск императивной анимации.
  • Интеграция со сторонними библиотеками DOM.

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

Например, вместо того, чтобы предоставлять методы open() и close() компонента Dialog, передайте ему свойство isOpen.

Не злоупотребляйте ссылками

Возможно, в первую очередь вам захочется использовать ссылки, чтобы «что-то произошло» в вашем приложении. Если это так, найдите минутку и подумайте более критически о том, где в иерархии компонентов должно находиться состояние. Часто становится ясно, что правильное место для «владения» этим состоянием находится на более высоком уровне иерархии. Примеры см. в руководстве по поднятию состояния вверх.

Примечание

Приведенные ниже примеры были обновлены для использования API React.createRef(), представленного в React 16.3. Если вы используете более раннюю версию React, мы рекомендуем вместо этого использовать ссылки обратного вызова.

Ссылки создаются с помощью React.createRef() и присоединяются к элементам React с помощью атрибута ref. Ссылки обычно назначаются свойству экземпляра при создании компонента, чтобы на них можно было ссылаться во всем компоненте.

Когда ссылка передается элементу в render , ссылка на узел становится доступной в текущем атрибуте ссылки.

Значение ссылки зависит от типа узла:

  • Когда атрибут ref используется в элементе HTML, ссылка, созданная в конструкторе с помощью React.createRef(), получает базовый элемент DOM в качестве своего текущего свойства.
  • Когда атрибут ref используется в компоненте пользовательского класса, объект ref получает смонтированный экземпляр компонента в качестве своего текущего .
  • Вы не можете использовать атрибут ref для функциональных компонентов, поскольку у них нет экземпляров.

Примеры ниже демонстрируют различия.

Добавление ссылки к элементу DOM

В этом коде используется ссылка для хранения ссылки на узел DOM:

React присвоит текущему свойству элемент DOM при монтировании компонента и присвоит ему значение null при размонтировании. обновления ref происходят до методов жизненного цикла componentDidMount или componentDidUpdate.

Добавление ссылки в компонент класса

Если бы мы хотели обернуть вышеприведенный CustomTextInput, чтобы имитировать его щелчок сразу после монтирования, мы могли бы использовать ссылку, чтобы получить доступ к пользовательскому вводу и вызвать его метод focusTextInput вручную:

Обратите внимание, что это работает, только если CustomTextInput объявлен как класс:

Ссылки и функциональные компоненты

По умолчанию вы не можете использовать атрибут ref для функциональных компонентов, поскольку у них нет экземпляров:

Если вы хотите, чтобы люди могли ссылаться на ваш компонент-функцию, вы можете использовать forwardRef (возможно, в сочетании с useImperativeHandle ) или преобразовать компонент в класс.

Однако вы можете использовать атрибут ref внутри функционального компонента, если вы ссылаетесь на элемент DOM или компонент класса:

Предоставление ссылок DOM родительским компонентам

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

Хотя вы можете добавить ссылку на дочерний компонент, это не идеальное решение, так как вы получите только экземпляр компонента, а не узел DOM. Кроме того, это не будет работать с функциональными компонентами.

Если вы используете React 16.3 или более позднюю версию, в таких случаях мы рекомендуем использовать переадресацию ссылок. Переадресация ссылок позволяет компонентам отображать ссылки любого дочернего компонента как свои собственные. Вы можете найти подробный пример того, как предоставить дочерний узел DOM родительскому компоненту в документации по пересылке ссылок.

Если вы используете React 16.2 или более раннюю версию или вам нужна большая гибкость, чем при переадресации ссылок, вы можете использовать этот альтернативный подход и явно передать ссылку как свойство с другим именем.

По возможности не рекомендуется открывать узлы DOM, но это может быть полезной лазейкой. Обратите внимание, что этот подход требует добавления некоторого кода в дочерний компонент.Если у вас нет абсолютно никакого контроля над реализацией дочернего компонента, последний вариант — использовать findDOMNode() , но в StrictMode это не рекомендуется и не рекомендуется.

React также поддерживает другой способ установки ссылок, называемый «ссылками обратного вызова», который обеспечивает более точный контроль над установкой и снятием ссылок.

Вместо передачи атрибута ref, созданного функцией createRef(), вы передаете функцию. Функция получает экземпляр компонента React или элемент HTML DOM в качестве аргумента, который можно сохранить и получить к нему доступ в другом месте.

В приведенном ниже примере реализован общий шаблон: использование обратного вызова ref для сохранения ссылки на узел DOM в свойстве экземпляра.

React будет вызывать обратный вызов ref с элементом DOM при монтировании компонента и вызывать его с нулевым значением при размонтировании. Ссылки гарантированно будут обновлены до того, как сработает componentDidMount или componentDidUpdate.

Вы можете передавать ссылки обратного вызова между компонентами так же, как и ссылки на объекты, созданные с помощью React.createRef() .

В приведенном выше примере Parent передает свой обратный вызов ref в качестве свойства inputRef в CustomTextInput , а CustomTextInput передает ту же функцию в качестве специального атрибута ref в . В результате this.inputElement в Parent будет установлен на узел DOM, соответствующий элементу в CustomTextInput .

Устаревший API: ссылки на строки

Если вы раньше работали с React, возможно, вы знакомы с более старым API, в котором атрибут ref представляет собой строку, например textInput , а доступ к узлу DOM осуществляется как this.refs.textInput . Мы не советуем этого делать, потому что у строковых ссылок есть некоторые проблемы, они считаются устаревшими и, вероятно, будут удалены в одном из будущих выпусков.

Примечание

Если вы в настоящее время используете this.refs.textInput для доступа к ссылкам, мы рекомендуем вместо этого использовать либо шаблон обратного вызова, либо API createRef.

Предостережения относительно ссылок обратного вызова

Если обратный вызов ref определен как встроенная функция, он будет вызываться дважды во время обновлений, сначала с нулевым значением, а затем снова с элементом DOM. Это связано с тем, что новый экземпляр функции создается при каждом рендеринге, поэтому React необходимо очистить старую ссылку и настроить новую. Этого можно избежать, определив обратный вызов ref как связанный метод класса, но учтите, что в большинстве случаев это не имеет значения.

org-ref: цитаты, перекрестные ссылки, указатели, глоссарии и утилиты bibtex для организационного режима

Обзор org-ref для экспорта в PDF через LaTeX.

Ключевые изменения в версии 3

Версия 3 поддерживает исходный синтаксис ссылки org-ref, поэтому все ваши устаревшие документы должны по-прежнему работать должным образом. Версия 3 по умолчанию использует новый синтаксис, поэтому в новых документах будут ссылки в более новом стиле.

В версии 3 представлено несколько критических (или, по крайней мере, вам придется обновить некоторые *Configuration, чтобы она снова заработала) изменений для пользователей с сильно измененными настройками org-ref версии 2. Они описаны ниже.

Почему ломаются изменения? Основная причина заключается в полной поддержке более богатого синтаксиса цитирования, который позволяет делать предварительные/постпримечания к цитированию, а также в интеграции использования CSL для экспорта не в LaTeX. Кроме того, org-ref нуждался в рефакторинге и улучшениях. org-ref как минимум 7 лет, и за это время он накопил множество функций. Я давно хотел консолидировать и очистить код, и новый синтаксис предоставил для этого возможность.

Я также воспользовался этой возможностью, чтобы представить несколько новых библиотек, таких как ./org-ref-refproc.el, которая является аналогом citeproc для перекрестных ссылок в экспорте, отличном от LaTeX.

[2021-10-18 Пн] Краткий список основных критических изменений

  • В версии 3 больше не используется множество переменных org-ref-*. Подробнее см. в разделе *Конфигурация.
  • Все кандидаты на завершение генерируются bibtex-completion
  • Существует только два бэкенда — helm-bibtex и ivy-bibtex, и оба полагаются на bibtex-completion
    • Ни helm, ни ivy не устанавливаются автоматически
    • Другие серверные части удалены.
    • Старая версия citeproc org-ref была удалена.

    А как насчет org-site?

    В организационном режиме версии 9.5 был добавлен новый синтаксис для цитат. Эта библиотека похожа на org-ref в том смысле, что она предоставляет механизм добавления ссылок в org-файлы, но имеет другой подход. org-cite спроектирован как очень модульный, с различными процессорами для вставки, активации, отслеживания и экспорта ссылок. Он также использует другой синтаксис типа cite/style. Он не обрабатывает перекрестные ссылки и не предоставляет каких-либо инструментов bibtex, доступных в org-ref. К основным преимуществам org-cite относятся:

    1. Теперь он встроен в режим организации.
    2. Он очень модульный, поэтому вы можете настроить его по своему усмотрению.

    org-cite не отвечает моим потребностям в цитировании и публикации технических документов, и было невозможно интегрировать его в org-ref без ущерба для них. По этой причине я решил продолжить разработку org-ref. Насколько я знаю, org-ref теперь предоставляет те же возможности цитирования, что и org-cite. Я планирую продолжать использовать org-ref для написания технических документов.

    Вы можете использовать как org-cite, так и org-ref (хотя вам не следует делать это в одном и том же документе, поскольку они являются независимыми инструментами цитирования).

    Вот несколько аннотированных изображений базовой вставки цитат в организационном режиме. Это с серверной частью ivy.

    Так выглядит вставленная ссылка.

    Ссылки в org-ref являются гиперфункциональными (это означает, что с ними связано более одного действия). Они выполняют определенные действия, когда на них наведен курсор или вы нажимаете на них, а также когда на них наводится указатель мыши.

    Вот пример меню действий, которое вы получаете, когда нажимаете на ссылку цитирования.

    Вот перекрестная ссылка.

    org-ref может проанализировать ваш org-файл и сообщить вам об этом, например, если есть плохие цитаты, несколько определенных меток, неверные справочные ссылки, отсутствующие файлы библиографии и т. д. Вы можете выбрать каждый из них, и он перейдет к местоположение, чтобы помочь вам исправить это.

    Установка пакета через Melpa

    Затем вы сможете сделать M-x package-list-packages, найти org-ref и установить его или с

    Двумя исключениями из не установленных пакетов являются helm, helm-bibtex, ivy и ivy-bibtex. Вы должны установить их самостоятельно. Это изменение предназначено для людей, которые не выносят установки этих пакетов, если они их не используют.

    Установка через github

    Убедитесь, что все зависимости установлены. Затем клонируйте этот репозиторий и добавьте его в путь загрузки.

    Добавьте это в свой файл .emacs и см. раздел *Конфигурация.

    В версии 3 исключены все переменные org-ref-* и вместо них используются аналогичные переменные, определенные в bibtex-completion .

    Вот как я устанавливаю эти переменные для себя.

    Я также считаю эти настройки полезными для автоматического создания ключей bibtex.

    После того, как вы установите эти параметры, у вас будут следующие параметры для загрузки org-ref.

    Если вы предпочитаете ivy-bibtex, используйте это. Для этого требуется ivy-bibtex , но в настоящее время MELPA не устанавливает его автоматически.

    Если вы предпочитаете шлем, вы можете использовать его. Это использует код из helm-bibtex для вставки цитирования. Для этого требуется helm-bibtex, но в настоящее время MELPA не устанавливает его автоматически.

    org-ref больше не привязывает для вас сочетания клавиш. У вас есть несколько вариантов здесь. Чтобы получить поведение версии 2, используйте это в своем файле инициализации:

    Вы можете привязать каждую команду вставки отдельно, если хотите, после загрузки библиотеки таким образом. Здесь я использую ключ Hyper в качестве модификатора, но вы можете выбрать все, что вам удобно.

    Если вы используете какой-либо другой бэкэнд с завершением чтения, такой как selectrum или ido, то для простой библиотеки, использующей ванильное завершение чтения, вы можете просто потребовать ‘org-ref. Я не нахожу ванильную настройку завершения чтения полезной сама по себе, поскольку она не выполняет сужение кандидатов или нечеткое сопоставление без какой-либо внешней настройки. Это вариант, если вы этого хотите.

    Вы можете использовать любую другую библиотеку, которая вставляет нужные вам ссылки. Некоторые из них включают:

    Идите вперед и цитируйте.

    Некоторые другие полезные библиотеки в org-ref

    Обратите внимание, что многие из них были переименованы с префиксом org-ref.

    Для получения дополнительной информации см. руководство по org-ref или предпочтительно используйте M-x org-ref-help в emacs.

    Ошибки и проблемы

    Я хотел бы поблагодарить участников org-ref и всех, кто подал заявку или задал вопрос об org-ref в списке рассылки org-mode.

    Если вы заинтересованы в том, чтобы внести свой вклад в org-ref, я рекомендую вам сначала связаться со мной, чтобы обсудить эту идею. Обработчик проблем — отличный способ сделать это, чтобы другие тоже могли высказать свое мнение.

    О нас

    модули org-mode для цитат, перекрестных ссылок, библиографий в org-mode и полезные инструменты bibtex, чтобы работать с ними.

    Поскольку я начал использовать Emacs все больше и больше, я начал задаваться вопросом, могу ли я использовать org-mode для ведения списка чтения/библиографии?

    Быстрый поиск привел меня к этому сообщению в блоге, где автор представлял свою установку для того же самого. Однако после прочтения поста я увидел, что автор использует комбинацию задач и списка для чтения, что требует выполнения специального кода и слишком сложно для моих нужд.

    Все, что мне нужно, это простой список, который:

    • должен быть доступен на нескольких рабочих станциях
    • может создаваться и управляться с помощью готовых компонентов без особых усилий
    • должен позволить мне изменить статус записи.

    Однако мне понравилась идея использовать ссылки на читаемые документы, и, поскольку я недавно увидел видео на YouTube, представляющее org-ref, я решил попробовать.

    Для обработки части доступности я решил использовать Dropbox, который также предлагается org-ref .

    Настройка org-ref

    org-ref доступен на Melpa, поэтому для его установки просто введите M-x package-install org-ref . Затем скопируйте приведенный ниже код в файл инициализации и настройте пути:

    Создание списка чтения

    • Возможно означает, что чтение записи необязательно
    • В ожидании – запись будет прочитана через некоторое время после завершения элемента, который я сейчас читаю.
    • Чтение — элемент, который в данный момент читается
    • Готово — записи, которые уже прочитаны.

    Добавление записи в список

    Добавить запись bibtex в файл references.bib. Например:

    • При наведении курсора на заголовок:
      • Нажмите C-c C-x p
      • Выберите или напишите статус.
      • Нажмите «Ввод».
      • Выберите значение для статуса (например, Ожидание )
      • Нажмите «Ввод».
      • Нажмите C-c C-x p
      • Напишите или выберите источник
      • Нажмите «Ввод».
      • Если вы знаете ключ цитирования (le2014distributed в приведенном выше примере), вы можете напрямую написать cite:le2014distributed ; в противном случае оставьте значение Source пустым и поместите курсор после объявления свойства. Затем нажмите C-c ] и выберите запись из списка ссылок.

      Повторите описанные выше шаги, и у вас должен получиться такой список:

      Изменить статус записи

      Чтобы изменить статус записи:

      • Перейдите к нужной записи
      • Повторите шаги, описанные выше, для настройки свойства "Статус" и выберите правильное значение для параметра "Статус".

      Обзор статуса

      После создания списка вам может понадобиться обзор состояния каждой записи. Этого можно добиться с помощью представления столбца организации. Настройка просмотра столбцов находится в третьей строке заголовка

      который сообщает организационному режиму, как отображать записи. А именно, мы определяем два столбца:

      1. Элемент, который будет отображать заголовок на 120 символов и
      2. Статус, который займет столько места, сколько необходимо для отображения статуса

      Переключение на просмотр столбцов

      Чтобы переключиться в режим столбцов, поместите курсор за пределы заголовков и нажмите C-c C-x C-c (или M-x org-columns ). Список должен выглядеть так, как показано на рисунке ниже: Если ваш курсор находился на заголовке при нажатии C-c C-x C-c (вызов org-columns ), то представление столбцов будет активировано только для выбранного заголовка.

      Выход из представления столбца

      Чтобы выйти из режима просмотра столбцов, поместите курсор на заголовок, который в данный момент находится в режиме просмотра столбцов, и нажмите q .

      Может ли кто-нибудь указать мне хорошее руководство по использованию org-ref?

      За последние 24 часа я установил много пакетов в emacs, не только org-mode, но и многие другие, и все это работало довольно хорошо с некоторыми усилиями. Но потом я попробовал org-ref. Моя проблема не столько в том, чтобы заставить его работать, сколько в том, чтобы узнать, как это работает. Как он предназначен для использования? Руководство, ссылка на которое находится на странице github, недостаточно хороша (мягко говоря).

      Пожалуйста, имейте в виду, что ссылки и управление библиографическими базами данных затруднены. Здесь есть реальная кривая обучения, от понимания bibtex до понимания латекса, организационного режима и того, как различные серверные части экспорта работают со сносками, концевыми примечаниями и библиографиями. Относитесь к этому как к марафону, со временем вы поймете, как создать свой рабочий процесс в emacs и выбрать правильный микс, который будет работать на вас.Не существует универсального решения для всех, в этом великая сила emacs, но на это потребуется время.

      У вас есть готовые настройки org-ref в файле инициализации?

      Мой выглядит так:

      Я использую Zotero для управления цитатами и Zotfile (плагин Zotero) для управления переименованием PDF-файлов и т. д.

      Для org-ref важно, чтобы имя файла PDF совпадало с ключом цитирования. Вы можете настроить это, используя Zotfile и Zotero Better Bib(La)Tex (также подключаемый модуль Zotero). С помощью плагина bibtex вы также можете настроить автоматический экспорт своей библиографии. Я просто экспортирую всю библиографию и получаю один большой файл bibtex с каждой цитатой, которая у меня есть.

      После того, как он запущен, пришло время использовать его в организационном режиме. У меня тоже были такие же проблемы, как у вас. Как использовать org-ref. На самом деле, я не очень хорошо разбираюсь в его использовании, но все, что вам действительно нужно, это знать, как ввести цитату, ссылку и как сделать метку.

      Чтобы помочь вам найти нужную команду, используйте M-x (используйте версию ivy или Helm для лучшего поиска и т. д.). Если вы вызовете M-x и начнете вводить «org-ref», вы увидите множество опций, которые начинают появляться. Одним из них является команда «org-ref-helm-insert-cite-link», активируйте ее с помощью ввода. Если в файле инициализации все настроено правильно, вы должны увидеть список всех ваших цитат в вашей библиографии, который вы можете искать, например, по имени автора (просто написав имя). Выберите цитату, которую вы хотите ввести, и посмотрите, как она будет добавлена ​​в ваш комментарий (используя ее ключ цитирования).

      Теперь последнее, что вам нужно, это что-то в вашем документе, которое сообщает org-mode, какую библиографию использовать для создания списка литературы.

      Поместите это в то место, где должны появиться ссылки (конец вашего оргфайла/документа):

      Теперь, если все работает нормально, org-mode создаст PDF-файл с правильными ссылками, если вы вызовете "C-c C-e l o"

      Иногда Latex требуется 2-3 раза, пока он не получит правильные ссылки.

      Если вам нужна дополнительная помощь, дайте мне знать. В настоящее время я использую org-mode/Scimax в качестве настройки моего лабораторного учебника, и мне, вероятно, приходилось решать те же проблемы, что и вам.

      Читайте также: