Skip to content

Commit 67c00a7

Browse files
authored
Merge pull request #1038 from ReactTooltip/fix/use-client-removed-from-dist-files
fix: use client removed from dist files
2 parents 030364e + e005df1 commit 67c00a7

File tree

4 files changed

+65
-135
lines changed

4 files changed

+65
-135
lines changed

README.md

Lines changed: 11 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@
2020

2121
If you like the project, please give the project a GitHub 🌟
2222

23+
---
24+
25+
Why do we show ads on our docs?
26+
27+
- ReactTooltip is an open source project, this is the way we found to be financed by the community.
28+
2329
## Demo
2430

2531
[![Edit ReactTooltip](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/still-monad-yfi4fn?fontsize=14&hidenavigation=1&theme=dark)
@@ -42,6 +48,8 @@ Documentation for V5 - [ReactTooltip](https://react-tooltip.com/docs/getting-sta
4248
</a>
4349
</p>
4450

51+
---
52+
4553
## Installation
4654

4755
```sh
@@ -56,14 +64,6 @@ yarn add react-tooltip
5664

5765
## Usage
5866

59-
> :warning: ReactTooltip will inject the default styles into the page by default on version `5.13.0` or newer.
60-
> The `react-tooltip/dist/react-tooltip.css` file is only for style reference and doesn't need to be imported manually anymore if you are already using `v5.13.0` or upper.
61-
62-
> :warning: If you were already using `react-tooltip<=5.7.5`, you'll be getting some deprecation warnings regarding the `anchorId` prop and some other features.
63-
> In versions >=5.8.0, we've introduced the `data-tooltip-id` attribute, and the `anchorSelect` prop, which are our recommended methods of using the tooltip moving forward. Check [the docs](https://react-tooltip.com/docs/getting-started) for more details.
64-
65-
### Using NPM package
66-
6767
1 . Import the CSS file to set default styling.
6868

6969
> :warning: If you are using a version before than `v5.13.0`, you must import the CSS file or the tooltip won't show!
@@ -104,59 +104,6 @@ import { Tooltip as ReactTooltip } from 'react-tooltip'
104104
<Tooltip id="my-tooltip" />
105105
```
106106

107-
#### Using multiple anchor elements
108-
109-
You can also set the `anchorSelect` tooltip prop to use the tooltip with multiple anchor elements without having to set `data-tooltip-id` on each of them.
110-
`anchorSelect` must be a valid [CSS selector](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors).
111-
112-
```jsx
113-
<a className="my-anchor-element" data-tooltip-content="Hello world!">
114-
◕‿‿◕
115-
</a>
116-
<a className="my-anchor-element" data-tooltip-content="Hello to you too!">
117-
◕‿‿◕
118-
</a>
119-
<Tooltip anchorSelect=".my-anchor-element" />
120-
```
121-
122-
Check [the V5 docs](https://react-tooltip.com/docs/getting-started) for more complex use cases.
123-
124-
### Standalone
125-
126-
You can import `node_modules/react-tooltip/dist/react-tooltip.[mode].js` into your page. Please make sure that you have already imported `react` and `react-dom` into your page.
127-
128-
mode: `esm` `cjs` `umd`
129-
130-
If you are using a version older than `v5.13.0` don't forget to import the CSS file from `node_modules/react-tooltip/dist/react-tooltip.css` to set default styling. This needs to be done only once in your application. Version `v5.13.0` or newer already inject the default styles into the page by default.
131-
132-
PS: all the files have a minified version and a non-minified version.
133-
134-
![image](https://user-images.githubusercontent.com/9615850/205637814-c0ef01ae-bd77-4e7f-b4bf-df502c71e5c3.png)
135-
136-
## Options
137-
138-
For all available options, please check [React Tooltip Options](https://react-tooltip.com/docs/options)
139-
140-
### Security note
141-
142-
The `html` option allows a tooltip to directly display raw HTML. This is a security risk if any of that content is supplied by the user. Any user-supplied content must be sanitized, using a package like [sanitize-html](https://www.npmjs.com/package/sanitize-html). We chose not to include sanitization after discovering it [increased our package size](https://github.com/wwayne/react-tooltip/issues/429) too much - we don't want to penalize people who don't use the `html` option.
143-
144-
#### JSX note
145-
146-
You can use [`renderToStaticMarkup()` function](https://reactjs.org/docs/react-dom-server.html#rendertostaticmarkup) to use JSX instead of HTML.
147-
**Example:**
148-
149-
```jsx
150-
import ReactDOMServer from 'react-dom/server';
151-
[...]
152-
<a
153-
data-tooltip-id="my-tooltip"
154-
data-tooltip-html={ReactDOMServer.renderToStaticMarkup(<div>I am <b>JSX</b> content</div>)}
155-
>
156-
◕‿‿◕
157-
</a>
158-
```
159-
160107
## Troubleshooting
161108

162109
Before trying these, make sure you're running the latest ReactTooltip version with
@@ -171,79 +118,11 @@ or
171118
yarn add react-tooltip@latest
172119
```
173120

121+
Please check our [troubleshooting section](https://react-tooltip.com/docs/troubleshooting) on our docs.
122+
174123
If you can't find your problem here, make sure there isn't [an open issue](https://github.com/ReactTooltip/react-tooltip/issues) already covering it.
175124
If there isn't, feel free to [submit a new issue](https://github.com/ReactTooltip/react-tooltip/issues/new/choose).
176125

177-
### The tooltip is broken/not showing up
178-
179-
Make sure you've imported the default styling. You only need to do this once on your application and only if you are using a version before `5.13.0`, `App.jsx`/`App.tsx` is usually a good place to do it.
180-
181-
```jsx
182-
import 'react-tooltip/dist/react-tooltip.css'
183-
```
184-
185-
If you've imported the default styling and the tooltip is still not showing up when you hover on your anchor element, make sure you have content to be displayed by the tooltip.
186-
187-
If `data-tooltip-content` and `data-tooltip-html` are both unset (or they have empty values) on the anchor element, and also the `content`, `render`, and `children` props on the tooltip are unset (or have empty values), the tooltip is not shown by default.
188-
189-
### Next.js `TypeError: f is not a function`
190-
191-
This problem seems to be caused by a bug related to the SWC bundler used by Next.js.
192-
The best way to solve this is to upgrade to `next@13.3.0` or later versions.
193-
194-
Less ideally, if you're unable to upgrade, you can set `swcMinify: false` on your `next.config.js` file.
195-
196-
### Bad performance
197-
198-
If you're experiencing any kind of unexpected behavior or bad performance on your application when using ReactTooltip, here are a few things you can try.
199-
200-
#### Move `<Tooltip />` on the DOM
201-
202-
This is specially relevant when using components that are conditionally rendered.
203-
204-
Always try to keep the `<Tooltip />` component rendered, so if you're having issues with a tooltip you've placed inside a component which is placed/removed from the DOM dynamically, try to move the tooltip outside of it.
205-
206-
We usually recommend placing the tooltip component directly inside the root component of your application (usually on `App.jsx`/`App.tsx`).
207-
208-
#### Dynamically generated anchor elements
209-
210-
You should avoid needlessly using a large amount of `<Tooltip />` components. One tooltip component that you use across your whole application should be good enough in most cases, but you should be fine to add a few more if you need to use different styled tooltips.
211-
212-
Here's a simple example on how to improve performance when using dynamically generated items.
213-
214-
> Check the docs for examples for the [`anchorSelect`](https://react-tooltip.com/docs/examples/anchor-select) and [`render`](https://react-tooltip.com/docs/examples/render) props for more complex use cases.
215-
216-
```jsx
217-
// ❌ BAD
218-
<div className="items-container">
219-
{myItems.map(({ id, content, tooltip }) => (
220-
<div key={id} className="item" data-tooltip-id={`tooltip-${id}`}>
221-
{content}
222-
<Tooltip id={`tooltip-${id}`} content={tooltip} />
223-
</div>
224-
))}
225-
</div>
226-
```
227-
228-
```jsx
229-
// ✅ GOOD
230-
<div className="items-container">
231-
{
232-
myItems.map(({ id, content, tooltip }) => (
233-
<div
234-
key={id}
235-
className="item"
236-
data-tooltip-id="my-tooltip"
237-
data-tooltip-content={tooltip}
238-
>
239-
{content}
240-
</div>
241-
))
242-
}
243-
</div>
244-
<Tooltip id="my-tooltip" />
245-
```
246-
247126
## Article
248127

249128
[How I insert sass into react component](https://medium.com/@wwayne_me/how-i-insert-sass-into-my-npm-react-component-b46b9811c226#.gi4hxu44a)
@@ -270,7 +149,7 @@ We would gladly accept a new maintainer to help out!
270149

271150
## Contributing
272151

273-
We welcome your contribution! Fork the repo, make some changes, submit a pull-request! Our [contributing](contributing.md) doc has some details.
152+
We welcome your contribution! Fork the repo, make some changes, submit a pull-request! Our [contributing](CONTRIBUTION.md) doc has some details.
274153

275154
## License
276155

docs/docs/examples/html.mdx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,25 @@ import { Tooltip } from 'react-tooltip';
8484
id="my-tooltip-html-prop"
8585
html="Hello<br /><s>multiline</s><br /><b>HTML</b><br />tooltip"
8686
/>
87+
88+
#### Security note
89+
90+
The `html` option allows a tooltip to directly display raw HTML. This is a security risk if any of that content is supplied by the user.
91+
Any user-supplied content must be sanitized, using a package like [sanitize-html](https://www.npmjs.com/package/sanitize-html).
92+
We chose not to include sanitization after discovering it [increased our package size](https://github.com/wwayne/react-tooltip/issues/429) too much - we don't want to penalize people who don't use the `html` option.
93+
94+
#### JSX note
95+
96+
You can use [`renderToStaticMarkup()` function](https://reactjs.org/docs/react-dom-server.html#rendertostaticmarkup) to use JSX instead of HTML.
97+
**Example:**
98+
99+
```jsx
100+
import ReactDOMServer from 'react-dom/server';
101+
[...]
102+
<a
103+
data-tooltip-id="my-tooltip"
104+
data-tooltip-html={ReactDOMServer.renderToStaticMarkup(<div>I am <b>JSX</b> content</div>)}
105+
>
106+
◕‿‿◕
107+
</a>
108+
```

docs/docs/troubleshooting.mdx

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,37 @@ The best way to solve this is to upgrade to `next@13.3.0` or later versions.
7171

7272
Less ideally, if you're unable to upgrade, you can set `swcMinify: false` on your `next.config.js` file.
7373

74+
## Next.js `"use client"` error
75+
76+
This normally happens when you use `react-tooltip` inside a component that is not tagged as client component. For more info, see the [Next.js docs](https://nextjs.org/docs/getting-started/react-essentials#client-components).
77+
78+
To use `react-tooltip` on Next.js 13 without having to tag your component or page as a client component, just create a new file `ReactTooltip.tsx` (for this example, the file path is `src/components/ReactTooltip.tsx`) and place the following code inside of the created file:
79+
80+
:::caution
81+
82+
Avoid naming the file `react-tooltip.tsx` (or with whichever extension your project uses), since it may interfere with your editor's autocomplete funcionality.
83+
84+
:::
85+
86+
```jsx
87+
// src/components/ReactTooltip.tsx
88+
'use client'
89+
90+
export * from 'react-tooltip'
91+
```
92+
93+
And in the place that you are importing React Tooltip:
94+
95+
```jsx
96+
// ❌ Old
97+
import { Tooltip } from 'react-tooltip'
98+
```
99+
100+
```jsx
101+
// ✅ New
102+
import { Tooltip } from 'components/react-tooltip'
103+
```
104+
74105
## Bad performance
75106

76107
If you're experiencing any kind of unexpected behavior or bad performance on your application when using ReactTooltip, here are a few things you can try.

rollup.config.prod.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@ const banner = `
1919
* {@link https://github.com/ReactTooltip/react-tooltip}
2020
* @copyright ReactTooltip Team
2121
* @license MIT
22-
*/
23-
24-
'use client';` // this 'use client' prevent break Next.js 13 projects when using tooltip on server side components
22+
*/`
2523

2624
const external = [
2725
...Object.keys(pkg.peerDependencies ?? {}),

0 commit comments

Comments
 (0)