salesforce / design-system-react

Salesforce Lightning Design System for React
https://design-system-react-site.herokuapp.com/
BSD 3-Clause "New" or "Revised" License
913 stars 415 forks source link

Remove deprecated UNSAFE_componentWillUpdate in SLDSDataTable #3053

Open DNiederweis opened 2 years ago

DNiederweis commented 2 years ago

Fixes # Deprecation Warning in console about UNSAFE_componentWillUpdate which "promotes unsafe coding practices" - React Blog

Additional description

While UNSAFE_componentWillUpdate is called right before render, getSnapshotBeforeUpdate is called right before mutating the DOM. According to the React Documentation, the combination of getSnapshotBeforeUpdate and componentDidUpdate should cover all use cases for the legacy componentWillUpdate.

In this case since the purpose of using UNSAFE_componentWillUpdate appeared to be resetting the interactive elements for the datatable if the props differed, I moved this logic into getSnapshotBeforeUpdate. However, since getSnapshotBeforeUpdate gets the previous props rather than the next props, the if-statement had to be slightly adjusted. Additionally, because getSnapshotBeforeUpdate must contain a return statement(the return is passed as the third parameter to componentDidUpdate), it simply returns null. This change avoid the deprecation warning and enables the same behavior as with UNSAFE_componentWillUpdate.


CONTRIBUTOR checklist (do not remove)

Please complete for every pull request

REVIEWER checklist (do not remove)

welcome[bot] commented 2 years ago

Thanks for opening this pull request! :100:

This is a community-driven project, and we can't do it without your participation. Please check out our contributing guidelines and review the Contributor Checklist if you haven't already, to make sure everything is squared away. CircleCI will take about 10 minutes to run through the same items that are on the Contributor checklist with a pass/fail check below. Please fix any issues that cause CircleCI to fail or ask for clarification--we try, but sometimes the errors can be unclear. A maintainer will try to respond within 7 days. If you haven’t heard anything by then, please bump this thread. To ensure codebase quality, large code line changes may take more than 2 weeks to review, but may take longer depending on the number of pull requests in the queue. Feel free to ask for a status update at any time--you won't be bothering anyone. Once feedback has been given, please reply to the feedback giver once the feedback on been addressed, so that they can continue the review. If you need a release while you are waiting for a code review, you can publish a built tag to your own fork. See directions in the release README.