как скрыть документ.querySelector для пользователя с помощью react hooks

#javascript #reactjs #react-hooks

#javascript #reactjs #react-перехваты

Вопрос:

как преобразовать получаемый элемент с помощью querySeletor для добавления div с ref document.querySelector для использования react hooks

 import ReactDOM from "react-dom";
    import h337 from "heatmap.js";
    import "./styles.css";
    
    function App() {
    
      useEffect(() => {
        var heatmapInstance = h337.create({
          // only container is required, the rest will be defaults
          container: document.querySelector('.App')
        });
        // now generate some random data
        var points = [];
        var max = 0;
        var width = 840;
        var height = 400;
        var len = 200;
    
        while (len--) {
         var val = Math.floor(Math.random()*100);
         max = Math.max(max, val);
         var point = {
          x: Math.floor(Math.random()*width),
          y: Math.floor(Math.random()*height),
          value: val
         };
         points.push(point);
       }
       // heatmap data format
      var data = {
        max: max,
        data: points
      };
      // if you have a set of datapoints always use setData instead of addData
      // for data initialization
      heatmapInstance.setData(data);
     })
    
    
    
      return (
        <div className="App">
          <h1>Hello CodeSandbox</h1>
          <h2>Start editing to see some magic happen!</h2>
        </div>
      );
    }
    
    const rootElement = document.getElementById("root");
    ReactDOM.render(<App />, rootElement);
  

как преобразовать получаемый элемент с помощью querySeletor для добавления div с ref document.querySelector для использования react hooks

Ответ №1:

 const appRef = React.useRef();

...

<div className="App" ref={appRef}>
  

А затем можно получить элемент DOM (такой же, как document.querySelector(‘.App’)):

 appRef.current 
  

Ваше приложение отображается быстрее, чем вы пытаетесь получить к нему доступ. Вам нужно добавить небольшие изменения в useEffect hook:

 useEffect(() => {
  if(appRef.current) {
    ...your code here
  }
}, [appRef])
  

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

Комментарии:

1. Я попытался использовать useRef текущее свойство не определено

2. Вам нужно использовать его следующим образом: useEffect(() => {...your code here}, []) где [] — массив зависимостей, который в вашем случае должен быть пустым.

3. нужно ли мне менять container: document. querySelector(‘.App’) для ссылки?? получение целевого контейнера с ошибкой не является элементом DOM. в Object.render (react-dom.development.js?61bb:24828)