javascript - 相当于 React 中的 document.querySelectorAll(),onScroll

标签 javascript reactjs

React 中 document.querySelectorAll('.classname') 的等价物是什么?我知道我应该使用 Refs,但是如何观察多个 Refs onScroll

我通常会使用类似下面的函数来检查页面中多个元素的视口(viewport)位置,并在每个元素进入视口(viewport)时触发不同的css动画:

HTML

<ul>
  <li data-position="below-viewport"></li>
  <li data-position="below-viewport"></li>
  <li data-position="below-viewport"></li>
  <li data-position="below-viewport"></li>
</ul>

Javascript

getPosition: function (element) {
  const rect = element.getBoundingClientRect();

  if ((rect.top > -1) && (rect.top < (window.innerHeight * 0.75))) {
    element.setAttribute('data-js-position','in-viewport');
  } else if ((rect.top > 0) && (rect.top < window.innerHeight)) {
    element.setAttribute('data-js-position','entering-viewport');
  } else if (rect.top > window.innerHeight) {
    element.setAttribute('data-js-position','below-viewport');
  } else if (rect.bottom < 0) {
    element.setAttribute('data-js-position','above-viewport');
  }
}

window.addEventListener('scroll', function() {
  [].forEach.call(document.querySelectorAll('[data-js-position]'), el => {
    positionChecker.getPosition(el);
  })
});

我如何在 React 中实现类似的东西?你能给我一个在 React 中观察多个 div 的函数的例子吗?

更好的是:我如何在 App.js 中抽象这个函数,以便我也可以在子组件中使用它?

最佳答案

让每个 li html 元素成为自己的组件,并在其自己的状态下保存对它的 ref 引用。

class LiElement extends React.Component {
  componentDidMount() {
    this.ref.getPosition()
  }

  render() {
    return (
      <li ref={(ctx) => this.ref = ctx}>
      </li>
    )
  }
}

关于javascript - 相当于 React 中的 document.querySelectorAll(),onScroll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49344348/

相关文章:

css - 如何更改 Semantic UI React Dropdown 的边框颜色?

javascript - Angularjs - NgView 不工作

javascript - 浏览器多久轮询一次鼠标位置?

javascript - webapi 后端与纯 javascript 前端,安全

reactjs - 使用 create-react-app 创建新的 react 应用程序时遇到问题

jasmine - 在 React 测试中查找焦点元素

reactjs - useQuery 在使用 useMutations [Apollo/React hooks] 重定向后返回 undefined

javascript - 什么时候在 react 中使用无状态组件

javascript - webpack 2 预期 '!' 错误与导入一起使用

javascript - 使用 event.preventDefault() 后导航不起作用