no-find-dom-node.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /**
  2. * @fileoverview Prevent usage of findDOMNode
  3. * @author Yannick Croissant
  4. */
  5. 'use strict';
  6. const docsUrl = require('../util/docsUrl');
  7. const report = require('../util/report');
  8. // ------------------------------------------------------------------------------
  9. // Rule Definition
  10. // ------------------------------------------------------------------------------
  11. const messages = {
  12. noFindDOMNode: 'Do not use findDOMNode. It doesn’t work with function components and is deprecated in StrictMode. See https://reactjs.org/docs/react-dom.html#finddomnode',
  13. };
  14. /** @type {import('eslint').Rule.RuleModule} */
  15. module.exports = {
  16. meta: {
  17. docs: {
  18. description: 'Disallow usage of findDOMNode',
  19. category: 'Best Practices',
  20. recommended: true,
  21. url: docsUrl('no-find-dom-node'),
  22. },
  23. messages,
  24. schema: [],
  25. },
  26. create(context) {
  27. return {
  28. CallExpression(node) {
  29. const callee = node.callee;
  30. const isFindDOMNode = ('name' in callee && callee.name === 'findDOMNode') || (
  31. 'property' in callee
  32. && callee.property
  33. && 'name' in callee.property
  34. && callee.property.name === 'findDOMNode'
  35. );
  36. if (!isFindDOMNode) {
  37. return;
  38. }
  39. report(context, messages.noFindDOMNode, 'noFindDOMNode', {
  40. node: callee,
  41. });
  42. },
  43. };
  44. },
  45. };