Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/renansoares/useWaitForElements

A React Hook to check when elements are rendered.
https://github.com/renansoares/useWaitForElements

hooks mutationobserver react

Last synced: about 1 month ago
JSON representation

A React Hook to check when elements are rendered.

Awesome Lists containing this project

README

        


useWaitForElements ⏳


A React hook to be used to know when elements are rendered built with

MutationObserver
.

## When do I need it?

Sometimes, you need to know when elements are currently rendered. One of the ways to do it is using MutationObserver. Using MutationObserver, this hook allows to know when a list of elements are rendered.

React provides a [`solution`](https://reactjs.org/docs/hooks-faq.html#how-can-i-measure-a-dom-node) when you want to know if a component is rendered that might be better than using this hook in some cases.

**This hook only tracks until all the elements are rendered. It stops observing after it, so if you are observing elements that can change state after the first render. I would recommend forking the repository and changing it.**

## Installation

```shell
npm install --save usewaitforelements
```

## Usage

You need to pass to the hook an object with an identifier and a [`selector`](https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Selectors) for each element.

Hook will return an object with the id, and a boolean indicating the presence for each element.

## Example

```jsx
import React, { useState } from 'react'
import ReactDOM from 'react-dom'
import useWaitForElements from 'usewaitforelements'

function Component(...props) {
const [shouldRender, setShouldRender] = useState(false);

// Pass an object of ids and selectors to the hook
const result = useWaitForElements({ element: '#elementId' });
// Initial result will be { element: false }

useEffect(() => {
// Element will be rendered in 2 seconds
setTimeout(() => setShouldRender(true), 2000);
// After element is rendered, result will be { element: true }
}, [setShouldRender]);

return (


{shouldRender &&

Element

}
{!result.element &&

Element is not rendered

}
{result.element &&

Element is rendered

}
)
}
```

### 🐛 Bugs

Please open an issue if you find a bug.

### 💻 Pull Requests

Pull requests are welcome! Feel free to submit a PR if you feel like it.

## LICENSE
MIT