Почему бы нам не использовать ref?

В документации Facebook на refs:

Don’t Overuse Refs Your first inclination may be to use refs to “make things happen” in your app. If this is the case, take a moment and think more critically about where state should be owned in the component hierarchy. Often, it becomes clear that the proper place to “own” that state is at a higher level in the hierarchy. See the Lifting State Up guide for examples of this.

В моем текущем приложении React у меня есть несколько узлов div, которые я хочу изменить при условии. Эти узлы div были созданы глубоко внутри цепочки render()returns. Я определенно не могу использовать Document.queryselector (). И я не могу думать ни о чем другом.

Документация также пыталась объяснить статьей «поднятие состояния вверх», но я не понял. Может кто-нибудь пролить свет на это? (ELI5, если бы вы могли.)

Вся суть консервативного использования refs заключается в том, чтобы убедиться, что вы не используете refs для того, что React уже предоставляет API (или в некоторой степени облегчает), например, условные классы CSS, условный рендеринг и т. д. Этого не следует выполнять используя собственные элементы DOM или jQuery, но полностью в React API. Но некоторые вещи, которые вы не можете делать только в React (например, программная фокусировка ввода), именно здесь и появляются ссылки.

Andrew Li 15.07.2018 03:17

Именно это я и пытался сделать (условный рендеринг, условные модификации). И я не мог придумать, как отреагировал бы на это иначе. Я копну немного глубже (с ответом ниже). Возможности всего фреймворка React намного шире, чем я думал.

theMobDog 15.07.2018 04:12

В частности, использование состояния для управления тем, что видит пользователь, является шаблоном React.

Andrew Li 15.07.2018 04:13

Есть ли подробное руководство по состоянию помимо документации React? Я в основном учусь, собирая кусочки и кусочки тут и там. Я чувствую, что мне нужно сделать это правильно для этого.

theMobDog 15.07.2018 04:19

Извините, я не знаю действительно хороших. Но я думаю, что здесь важно понять, что, когда вышел React, он стал пионером в приложениях управляемый государством по сравнению с приложениями, управляемыми событиями, которые многие привыкли писать, то есть делать что-то, когда пользователь щелкает мышью. Приложения с управлением состоянием означают, что каждый компонент имеет состояние; он имеет разные состояния (подумайте о разных представлениях пользовательского интерфейса), и мы можем изменить это состояние, чтобы изменить внешний вид пользовательского интерфейса, не обязательно только тогда, когда происходит событие. Вы можете поискать в Google, но я не могу придумать ничего, извините!

Andrew Li 15.07.2018 04:24
Поведение ключевого слова "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) для оценки ваших знаний,...
2
5
2 475
1

Ответы 1

Состояние отмены означает, что дочерние компоненты вызывают события, а не сами обрабатывают изменения состояния. В React docs они начинаются с того, что каждый компонент управляет своим собственным состоянием (handleChangeEvent). Далее они поднимают состояние, добавляя опору onTemperatureChange. Теперь дети делегируют изменение состояния своему ближайшему общему родителю, Calculator. Calculator изменяет состояние и передает новые значения вниз через свойства.

Я использую ссылки только тогда, когда мне нужно вызвать определенные функции для элементов DOM, причем focus() является наиболее распространенным использованием в моих приложениях. У этого ТАК ответ есть хороший пример, скопированный сюда, потому что ссылки плохие:

class App extends React.Component{
  componentDidMount(){
    this.nameInput.focus();
  }
  render() {
    return(
      <div>
        <input 
          defaultValue = "Won't focus" 
        />
        <input 
          ref = {(input) => { this.nameInput = input; }} 
          defaultValue = "will focus"
        />
      </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById('app'));

Также не забудьте прочитать ответ под связанным ответом, autoFocus - правильный ответ для фокусировки при монтировании, но наверняка есть моменты, когда вы хотите динамически фокусировать элементы.

Я получаю следующее: ref похож на оператор перехода, тогда как этот шаблон будет выдавать events, которые затем обрабатываются states?

theMobDog 15.07.2018 04:17
ref просто означает, что вы хотите сохранить ссылку на Элемент DOM. Похоже, вы все еще начинаете. Выясните реквизит и состояние, затем вернитесь к реферам
Andy Gaskell 15.07.2018 06:24

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