New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Remove react/no-array-index-key comments #3273
Remove react/no-array-index-key comments #3273
Comments
…3997) ## Description - [x] use values in keys in-place-of indexes in `polar/Pie` and `cartesian/Bar` components ## Related Issue [3273](#3273) ## Motivation and Context - contribute to the repo ## How Has This Been Tested? - [x] all existing unit tests pass (_no new `duplicate key` errors are present as a result_) ## Types of changes - [x] Technical Cleanup ## Checklist: - [x] My code follows the code style of this project. - [x] All new and existing tests passed.
## Description Set the `key` property on several components, removing the `index` and the eslint-ignore comments. ## Related Issue [3273](#3273) ## Motivation and Context Contribute without breaking anything ## How Has This Been Tested? - [x] all existing unit tests pass ## Types of changes - [x] code cleanup ## Checklist: - [x] My code follows the code style of this project. - [x] All new and existing tests passed - ~~My change requires a change to the documentation.~~ - ~~I have updated the documentation accordingly.~~ - ~~I have added tests to cover my changes.~~ - ~~I have added a storybook story or extended an existing story to show my changes~~
After changing some of these lint warnings there are quite a few instances of this throwing non-unique key warnings as shown in #4004 pie sectors, legend items, tooltip items (anything that has been changed recently). It seems storybook swallows these errors so its easier to identify them in the storybook. CC @imagineLife |
## Description In pursuit of removing all `no-array-index-key` lint-skipping instances, some keys are more complicate to set, particularly - Labels - Tooltips - Pie segments ## Related Issue [4004](#4004) [3273](#3273) ## Motivation and Context _Remove immediately-discovered console warnings based on demo charts_. ## How Has This Been Tested? - [x] manual usage of demo charts - [x] unit tests are still passing ## Types of changes - [x] "Bug" fix (non-breaking change which fixes an issue) ## Checklist: - [x] My code follows the code style of this project. - [x] All new and existing tests passed.
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [recharts](https://togithub.com/recharts/recharts) | [`2.10.3` -> `2.10.4`](https://renovatebot.com/diffs/npm/recharts/2.10.3/2.10.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/recharts/2.10.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/recharts/2.10.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/recharts/2.10.3/2.10.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/recharts/2.10.3/2.10.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>recharts/recharts (recharts)</summary> ### [`v2.10.4`](https://togithub.com/recharts/recharts/releases/tag/v2.10.4) [Compare Source](https://togithub.com/recharts/recharts/compare/v2.10.3...v2.10.4) #### What's Changed Fix some older bugs annoying bugs, TS typings, update to the storybook theme, and more ##### Fix - `ResponsiveContainer`: fix `ref.current.current` without breaking users using current implementation by [@​HHongSeungWoo](https://togithub.com/HHongSeungWoo) in [recharts/recharts#4008 - closes [recharts/recharts#3718 - `Brush`: Allow Brush to be controlled with start and end index via state by [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#4034 - closes [recharts/recharts#2404 - `Legend`: TypeScript - Add the dataKey type to legend props by [@​HHongSeungWoo](https://togithub.com/HHongSeungWoo) in [recharts/recharts#4035 - closes [recharts/recharts#2909 - `Pie`: TypeScript - added `payload` to `PieSectorDataItem` type by [@​PavelVanecek](https://togithub.com/PavelVanecek) in [recharts/recharts#4030 - `Pie`: unique sector keys fix by [@​imagineLife](https://togithub.com/imagineLife) in [recharts/recharts#4009 closes [recharts/recharts#3273 - `RadialBar`: allow className to be passed to Radial Bar background by [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#4027 - closes [recharts/recharts#4011 ##### Storybook - Storybook: Added Legend component story! by [@​AnujSharma141](https://togithub.com/AnujSharma141) in [recharts/recharts#4039 - Storybook: add controlled brush storybook entry by [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#4032 - Storybook: Custom Storybook theme for Recharts brand by [@​csdiehl](https://togithub.com/csdiehl) in [recharts/recharts#4016 #### New Contributors - [@​csdiehl](https://togithub.com/csdiehl) made their first contribution in [recharts/recharts#4016 - [@​AnujSharma141](https://togithub.com/AnujSharma141) made their first contribution in [recharts/recharts#4039 **Full Changelog**: recharts/recharts@v2.10.3...v2.10.4 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/SAP/ui5-webcomponents-react). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMjcuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEyNy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@ckifer If this is not resolved yet. Any chance I could take it? |
@BuddhikaGeasman there was a recent report of an issue in the latest comments here #4004 If you can find the error mentioned there that would be more important than removing these lint ignores. I actually think removing these ignores is impossible without re-thinking some things. Any time we use data to try and address these there are duplicate key errors (But yes, any contributions are welcome of course!) |
This error also appears in scatter chart when dots are drawn on top of each other. This causes duplications of dots if the chart is resized or the data updated as the chart can't keep track of all dots as they have the same key. |
Perhaps components that render chartable items should have (more) required unique props. Uniquely Identify ItemsOne recurring error in duplicate keys is revealed when 2 chartable items (pie slices, dots on a scatter, bars, could be more) have the same cartable "data": x values, y values, etc. One idea to tackle this seems to be set more required props for renderable elements: something like a "name", or "id". There does not seem to be enough required props that an be leveraged for a unique key when iterating over data to render. Another idea could be to add a required prop called uniqueId (or key or something) where developers who use recharges must bring-their-own key to recharts. This approach would perhaps be a bit more “breaking”. Recharts, as the library, would “pass along” the key provided by the developer to the charting rendering. The benefit here would be that recharts stops “caring about" the key the way it is currently trying to. |
Imo we should only put this burden on the consumer if they are iterating through things themselves. If we iterate, we need to be the ones who ensure keys are unique.
The consumer shouldn't have to have more data in their data in order to render a chart without errors
This doesn't work because that key will be the same for every element of every component giving us the same problem we currently have Not really sure of a great way - we can hash the whole object but that has the same chances of collision. We can generate a UUID based of the object but same thing, we can use a UUID but that negates the purpose... |
hey @ckifer thanks for the detailed reply! 😄 I do think iterating over items is such a normal practice for react developers that "passing along" the unique-key react "problem" along to the developer could work out one way or another. I do also get that recharts is doing the mapping, not consumers explicitly - it would be nice (&/or expected?!) if recharts could handle the mapping without the index - based on the data &/or some other uniquely-identifying prop(s) per element. |
I agree and users can do mapping themselves in some components using Cell. I guess what I want to drive home is that we need tests that protect against these errors before we can make changes like this. Not that I don't want to or we shouldn't, but we need a guarantee for all valid cases that the key we create is actually unique |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [recharts](https://togithub.com/recharts/recharts) | [`2.9.3` -> `2.12.1`](https://renovatebot.com/diffs/npm/recharts/2.9.3/2.12.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/recharts/2.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/recharts/2.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/recharts/2.9.3/2.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/recharts/2.9.3/2.12.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>recharts/recharts (recharts)</summary> ### [`v2.12.1`](https://togithub.com/recharts/recharts/releases/tag/v2.12.1) [Compare Source](https://togithub.com/recharts/recharts/compare/v2.12.0...v2.12.1) #### What's Changed Unintentional regression broke panoramic/compact Brush in 2.11.0 and 2.12.0, backport the fix to 2.x as we work on 3.x ##### Fix - fix: compact render should read from context, fixes brush panorama by [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#4194 fixes [recharts/recharts#4193 **Full Changelog**: recharts/recharts@v2.12.0...v2.12.1 ### [`v2.12.0`](https://togithub.com/recharts/recharts/releases/tag/v2.12.0) [Compare Source](https://togithub.com/recharts/recharts/compare/36c14c63d271d05b701e1d32ac931de0fd30b360...v2.12.0) #### What's Changed Bug fixes and a few small new features. Releasing 2.12.0 to create a "clean slate" as contributors are discussing next moves for recharts. We will try to focus on upgrades, architectural changes, and long-pending breaking changes so we can release a recharts v3. This will not be a large major version, or one hard to upgrade to, but rather a major version bump to prevent us from breaking people with library upgrades, large refactors, etc. Feature parity should hold. Thanks! #### Features - `Bar`: Accept a callback function for `minPointSize` so it can be determined by data by [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#4099 closes [recharts/recharts#2819 - `Accessibility`: Enable screen reader support with accessibilityLayer and default tooltip by [@​julianna-langston](https://togithub.com/julianna-langston) in [recharts/recharts#4077 #### Fix - `Bar`: `activeBar` should not be true by default, fixes a breaking change from 2.9.0 by [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#4139 - fixes [recharts/recharts#4103 and [recharts/recharts#4101 - `Scatter`: fix non-unique key errors by [@​imagineLife](https://togithub.com/imagineLife) in [recharts/recharts#4087 - fixes [recharts/recharts#4151 and [recharts/recharts#4060 - `Pie`: fix non-unique key errors by [@​imagineLife](https://togithub.com/imagineLife) in [recharts/recharts#4106 - `Tooltip`: fix bug that caused throttled tooltip to stay active when moving mouse quickly by [@​HHongSeungWoo](https://togithub.com/HHongSeungWoo) in [recharts/recharts#4100 fixes [recharts/recharts#4093 #### Chore - Cleanup, tests, and refactoring work. Thanks [@​PavelVanecek](https://togithub.com/PavelVanecek) - Upgrade react smooth, remove `translateStyle`, remove prop-types as a peerDep - **NOTE**: animations will no longer have browser prefixes on them. Browsers have good support for this (https://caniuse.com/?search=transforms) - Upgrade dev dependencies - Upgrade TypeScript to 4.9.5 (no definition changes from upgrade) #### Storybook - New storybook stories and doc updates #### New Contributors - [@​TRFielder](https://togithub.com/TRFielder) made their first contribution in [recharts/recharts#4088 **Full Changelog**: recharts/recharts@v2.11...v2.12.0 ### [`v2.11.0`](https://togithub.com/recharts/recharts/compare/v2.10.4...36c14c63d271d05b701e1d32ac931de0fd30b360) [Compare Source](https://togithub.com/recharts/recharts/compare/v2.10.4...36c14c63d271d05b701e1d32ac931de0fd30b360) ### [`v2.10.4`](https://togithub.com/recharts/recharts/releases/tag/v2.10.4) [Compare Source](https://togithub.com/recharts/recharts/compare/v2.10.3...v2.10.4) #### What's Changed Fix some older bugs annoying bugs, TS typings, update to the storybook theme, and more ##### Fix - `ResponsiveContainer`: fix `ref.current.current` without breaking users using current implementation by [@​HHongSeungWoo](https://togithub.com/HHongSeungWoo) in [recharts/recharts#4008 - closes [recharts/recharts#3718 - `Brush`: Allow Brush to be controlled with start and end index via state by [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#4034 - closes [recharts/recharts#2404 - `Legend`: TypeScript - Add the dataKey type to legend props by [@​HHongSeungWoo](https://togithub.com/HHongSeungWoo) in [recharts/recharts#4035 - closes [recharts/recharts#2909 - `Pie`: TypeScript - added `payload` to `PieSectorDataItem` type by [@​PavelVanecek](https://togithub.com/PavelVanecek) in [recharts/recharts#4030 - `Pie`: unique sector keys fix by [@​imagineLife](https://togithub.com/imagineLife) in [recharts/recharts#4009 closes [recharts/recharts#3273 - `RadialBar`: allow className to be passed to Radial Bar background by [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#4027 - closes [recharts/recharts#4011 ##### Storybook - Storybook: Added Legend component story! by [@​AnujSharma141](https://togithub.com/AnujSharma141) in [recharts/recharts#4039 - Storybook: add controlled brush storybook entry by [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#4032 - Storybook: Custom Storybook theme for Recharts brand by [@​csdiehl](https://togithub.com/csdiehl) in [recharts/recharts#4016 #### New Contributors - [@​csdiehl](https://togithub.com/csdiehl) made their first contribution in [recharts/recharts#4016 - [@​AnujSharma141](https://togithub.com/AnujSharma141) made their first contribution in [recharts/recharts#4039 **Full Changelog**: recharts/recharts@v2.10.3...v2.10.4 ### [`v2.10.3`](https://togithub.com/recharts/recharts/releases/tag/v2.10.3) [Compare Source](https://togithub.com/recharts/recharts/compare/v2.10.2...v2.10.3) #### What's Changed - Fix non-unique react `key` bug(s) by [@​imagineLife](https://togithub.com/imagineLife) in [recharts/recharts#4006 - closes [recharts/recharts#4004 #### New Contributors - [@​hkmarques](https://togithub.com/hkmarques) made their first contribution in [recharts/recharts#4002 **Full Changelog**: recharts/recharts@v2.10.2...v2.10.3 ### [`v2.10.2`](https://togithub.com/recharts/recharts/releases/tag/v2.10.2) [Compare Source](https://togithub.com/recharts/recharts/compare/v2.10.1...v2.10.2) #### What's Changed Patch some bugs from 2.9 / 2.10 ##### Fix - `Tooltip`: Fix tooltip rendering crash when activeItem is undefined by [@​tran-simon](https://togithub.com/tran-simon) in [recharts/recharts#3982 - `Cursor`: should no longer show gray background on hover where there was none previously [@​HHongSeungWoo](https://togithub.com/HHongSeungWoo) in [recharts/recharts#3992 - `Tooltip`: show tooltip when `data` prop is on individual cartesian component by [@​HHongSeungWoo](https://togithub.com/HHongSeungWoo) in [recharts/recharts#3988 - `LabelList` - TypeScript: LabelList offset prop issue by [@​ckifer](https://togithub.com/ckifer) in [recharts/recharts#3999 ##### Accessibility - `Brush`: set default aria-label and allow value override by [@​enriquetamames-cpi](https://togithub.com/enriquetamames-cpi) in [recharts/recharts#3950 ##### Refactor / Cleanup - Removing some eslint errors for "no array index key" by [@​imagineLife](https://togithub.com/imagineLife) #### New Contributors - [@​tran-simon](https://togithub.com/tran-simon) made their first contribution in [recharts/recharts#3982 - [@​enriquetamames-cpi](https://togithub.com/enriquetamames-cpi) made their first contribution in [recharts/recharts#3950 **Full Changelog**: recharts/recharts@v2.10.1...v2.10.2 ### [`v2.10.1`](https://togithub.com/recharts/recharts/releases/tag/v2.10.1): Patch: Do not include types from test folder [Compare Source](https://togithub.com/recharts/recharts/compare/15328ec11b78968c847b43b646767b7b0c0d9e36...v2.10.1) Fixes [recharts/recharts#3978 **Full Changelog**: recharts/recharts@v2.10...v2.10.1 ### [`v2.10.0`](https://togithub.com/recharts/recharts/compare/v2.9.3...15328ec11b78968c847b43b646767b7b0c0d9e36) [Compare Source](https://togithub.com/recharts/recharts/compare/v2.9.3...15328ec11b78968c847b43b646767b7b0c0d9e36) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 4pm every weekday" in timezone Europe/Paris, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/specfy/specfy). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy44MS4zIiwidXBkYXRlZEluVmVyIjoiMzcuMjAwLjAiLCJ0YXJnZXRCcmFuY2giOiJjaG9yZS9yZW5vdmF0ZUJhc2VCcmFuY2gifQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Follow to discussion in #3270
For every
eslint-disable-next-line react/no-array-index-key
we should find a valid string or number instead of using an indexThe text was updated successfully, but these errors were encountered: