UNPKG

eslint-config-alloy

Version:
459 lines 113 kB
{ "react/boolean-prop-naming": { "name": "react/boolean-prop-naming", "value": "off", "description": "布尔值类型的 propTypes 的 name 必须为 is 或 has 开头", "reason": "类型相关的约束交给 TypeScript", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/button-has-type": { "name": "react/button-has-type", "value": "off", "description": "<button> 必须有 type 属性", "reason": "", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/default-props-match-prop-types": { "name": "react/default-props-match-prop-types", "value": "off", "description": "一个 defaultProps 必须有对应的 propTypes", "reason": "类型相关的约束交给 TypeScript", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/destructuring-assignment": { "name": "react/destructuring-assignment", "value": "off", "description": "props, state, context 必须用解构赋值", "reason": "", "badExample": "", "goodExample": "", "fixable": true, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/display-name": { "name": "react/display-name", "value": "off", "description": "组件必须有 displayName 属性", "reason": "不强制要求写 displayName", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/forbid-component-props": { "name": "react/forbid-component-props", "value": "off", "description": "禁止在自定义组件中使用指定的 props", "reason": "", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/forbid-dom-props": { "name": "react/forbid-dom-props", "value": "off", "description": "禁止在 dom 组件中使用指定的 props", "reason": "", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/forbid-elements": { "name": "react/forbid-elements", "value": "off", "description": "禁止使用指定的组件", "reason": "", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/forbid-foreign-prop-types": { "name": "react/forbid-foreign-prop-types", "value": "off", "description": "禁止使用另一个组件的 propTypes", "reason": "类型相关的约束交给 TypeScript", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/forbid-prop-types": { "name": "react/forbid-prop-types", "value": "off", "description": "禁止使用 PropTypes.any PropTypes.array 和 PropTypes.object", "reason": "类型相关的约束交给 TypeScript", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/function-component-definition": { "name": "react/function-component-definition", "value": "off", "description": "限制函数式组件的函数形式(函数声明、函数表达式或箭头函数)", "reason": "一些场景还不能覆盖,如 export default function,自动修复功能在 ts 中有些问题", "badExample": "", "goodExample": "", "fixable": true, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/hook-use-state": { "name": "react/hook-use-state", "value": "off", "description": "hook 的返回值必须与 useState 的解构对应", "reason": "", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/iframe-missing-sandbox": { "name": "react/iframe-missing-sandbox", "value": "error", "description": "iframe 组件必须添加 sandbox 属性", "reason": "", "badExample": "<span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">Frame</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n </span><span class=\"token tag\"><mark class=\"eslint-error\" data-tip=\"An iframe element is missing a sandbox attribute&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/iframe-missing-sandbox)&lt;/span&gt;\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>iframe</span><span class=\"token punctuation\">></span></mark></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>iframe</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n </span><span class=\"token punctuation\">{</span><mark class=\"eslint-error\" data-tip=\"An iframe element is missing a sandbox attribute&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/iframe-missing-sandbox)&lt;/span&gt;\">React<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">'iframe'</span><span class=\"token punctuation\">)</span></mark><span class=\"token punctuation\">}</span><span class=\"token plain-text\">\n </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>", "goodExample": "<span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> Frame1 <span class=\"token operator\">=</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>iframe</span> <span class=\"token attr-name\">sandbox</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>allow-popups<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> <span class=\"token function-variable function\">Frame2</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>iframe</span> <span class=\"token attr-name\">sandbox</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>allow-popups<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>iframe</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n </span><span class=\"token punctuation\">{</span>React<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">'iframe'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> sandbox<span class=\"token punctuation\">:</span> <span class=\"token string\">'allow-popups'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\">\n </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-boolean-value": { "name": "react/jsx-boolean-value", "value": "off", "description": "布尔值的属性必须显式的声明值为 true", "reason": "", "badExample": "", "goodExample": "", "fixable": true, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-curly-brace-presence": { "name": "react/jsx-curly-brace-presence", "value": ["error", "never"], "description": "禁止 jsx 中使用无用的引号", "reason": "", "badExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">App</span></span> <span class=\"token attr-name\">prop</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><mark class=\"eslint-error\" data-tip=\"Curly braces are unnecessary here.&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-curly-brace-presence)&lt;/span&gt;\"><span class=\"token punctuation\">{</span><span class=\"token string\">'foo'</span><span class=\"token punctuation\">}</span></mark></span><span class=\"token punctuation\">></span></span><mark class=\"eslint-error\" data-tip=\"Curly braces are unnecessary here.&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-curly-brace-presence)&lt;/span&gt;\"><span class=\"token punctuation\">{</span><span class=\"token string\">'Hello World'</span><span class=\"token punctuation\">}</span></mark><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">App</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>", "goodExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">App</span></span> <span class=\"token attr-name\">prop</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>foo<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Hello World</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">App</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>", "fixable": true, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-filename-extension": { "name": "react/jsx-filename-extension", "value": "off", "description": "限制文件后缀", "reason": "", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-fragments": { "name": "react/jsx-fragments", "value": ["error", "syntax"], "description": "必须使用 <></> 而不是 React.Fragment", "reason": "<></> 不需要额外引入 Fragment 组件", "badExample": "<mark class=\"eslint-error\" data-tip=\"Prefer fragment shorthand over React.Fragment&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-fragments)&lt;/span&gt;\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">React.Fragment</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">React.Fragment</span></span><span class=\"token punctuation\">></span></span></mark><span class=\"token punctuation\">;</span>", "goodExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n </span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">React.Fragment</span></span> <span class=\"token attr-name\">key</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>value<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>value<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">React.Fragment</span></span><span class=\"token punctuation\">></span></span>\n <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\">\n</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>", "fixable": true, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-handler-names": { "name": "react/jsx-handler-names", "value": "off", "description": "handler 的名称必须是 onXXX 或 handleXXX", "reason": "", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-key": { "name": "react/jsx-key", "value": ["error", { "checkFragmentShorthand": true }], "description": "数组中的 jsx 必须有 key", "reason": "", "badExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ul</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n </span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n <mark class=\"eslint-error\" data-tip=\"Missing &amp;quot;key&amp;quot; prop for element in iterator&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-key)&lt;/span&gt;\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>value<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span></mark>\n <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\">\n</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ul</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n </span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n <mark class=\"eslint-error\" data-tip=\"Missing &amp;quot;key&amp;quot; prop for element in iterator. Shorthand fragment syntax does not support providing keys. Use React.Fragment instead&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-key)&lt;/span&gt;\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>value<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span></span><span class=\"token punctuation\">></span></span></mark>\n <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\">\n</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>", "goodExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ul</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n </span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span> <span class=\"token attr-name\">key</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>value<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>value<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\">\n</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ul</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n </span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span>\n <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">React.Fragment</span></span> <span class=\"token attr-name\">key</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>value<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span>value<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">React.Fragment</span></span><span class=\"token punctuation\">></span></span>\n <span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token plain-text\">\n</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-max-depth": { "name": "react/jsx-max-depth", "value": "off", "description": "限制 jsx 层级", "reason": "", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-no-bind": { "name": "react/jsx-no-bind", "value": "off", "description": "jsx 中禁止使用 bind", "reason": "", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-no-comment-textnodes": { "name": "react/jsx-no-comment-textnodes", "value": "error", "description": "禁止在 jsx 中使用像注释的字符串", "reason": "", "badExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"><mark class=\"eslint-error\" data-tip=\"Comments inside children section of tag should be placed inside braces&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-no-comment-textnodes)&lt;/span&gt;\">// empty div</mark>&lt;/div>;\n</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\"><mark class=\"eslint-error\" data-tip=\"Comments inside children section of tag should be placed inside braces&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-no-comment-textnodes)&lt;/span&gt;\">/* empty div */</mark></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">;\n</span>", "goodExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">{</span><span class=\"token comment\">/* empty div */</span><span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>\n<span class=\"token operator\">&lt;</span>div <span class=\"token comment\">/* empty div */</span> <span class=\"token operator\">/</span><span class=\"token operator\">></span><span class=\"token punctuation\">;</span>", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-no-constructed-context-values": { "name": "react/jsx-no-constructed-context-values", "value": "error", "description": "禁止使用不稳定的值作为 Context.Provider 的 value", "reason": "", "badExample": "<span class=\"token keyword\">function</span> <span class=\"token function\">Foo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Bar.Provider</span></span> <span class=\"token attr-name\">value</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><mark class=\"eslint-error\" data-tip=\"The object passed as the value prop to the Context provider (at line 2) changes every render. To fix this consider wrapping it in a useMemo hook.&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-no-constructed-context-values)&lt;/span&gt;\"><span class=\"token punctuation\">{</span> foo<span class=\"token punctuation\">:</span> <span class=\"token string\">'bar'</span> <span class=\"token punctuation\">}</span></mark><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Bar</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Bar.Provider</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>", "goodExample": "<span class=\"token keyword\">function</span> <span class=\"token function\">Foo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n <span class=\"token keyword\">const</span> foo <span class=\"token operator\">=</span> <span class=\"token function\">useMemo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> foo<span class=\"token punctuation\">:</span> <span class=\"token string\">'bar'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token keyword\">return</span> <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Bar.Provider</span></span> <span class=\"token attr-name\">value</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span>foo<span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Bar</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Bar.Provider</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-no-duplicate-props": { "name": "react/jsx-no-duplicate-props", "value": "error", "description": "禁止出现重复的 props", "reason": "", "badExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Foo</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>foo<span class=\"token punctuation\">\"</span></span> <mark class=\"eslint-error\" data-tip=\"No duplicate props allowed&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-no-duplicate-props)&lt;/span&gt;\"><span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>bar<span class=\"token punctuation\">\"</span></span></mark> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>", "goodExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Foo</span></span> <span class=\"token attr-name\">name</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>foo<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-no-leaked-render": { "name": "react/jsx-no-leaked-render", "value": "off", "description": "使用 && 渲染组件时,禁止条件是 0 '' 或 NaN", "reason": "", "badExample": "", "goodExample": "", "fixable": true, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-no-literals": { "name": "react/jsx-no-literals", "value": "off", "description": "禁止在 jsx 中出现字符串", "reason": "", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-no-script-url": { "name": "react/jsx-no-script-url", "value": "error", "description": "禁止出现 href=\"javascript:void(0)\"", "reason": "React 已经有 warning 了,并且会在将来禁止此类属性值", "badExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <mark class=\"eslint-error\" data-tip=\"A future version of React will block javascript: URLs as a security precaution. Use event handlers instead if you can. If you need to generate unsafe HTML, try using dangerouslySetInnerHTML instead.&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-no-script-url)&lt;/span&gt;\"><span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>javascript:void(0);<span class=\"token punctuation\">\"</span></span></mark><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>", "goodExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span>\n <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>#<span class=\"token punctuation\">\"</span></span>\n <span class=\"token attr-name\">onClick</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">e</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n e<span class=\"token punctuation\">.</span><span class=\"token function\">preventDefault</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span></span>\n<span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-no-target-blank": { "name": "react/jsx-no-target-blank", "value": "off", "description": "禁止使用 target=\"_blank\"", "reason": "", "badExample": "", "goodExample": "", "fixable": true, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-no-undef": { "name": "react/jsx-no-undef", "value": "error", "description": "禁止使用未定义的组件", "reason": "", "badExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\"><mark class=\"eslint-error\" data-tip=\"&amp;apos;Foo&amp;apos; is not defined.&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-no-undef)&lt;/span&gt;\">Foo</mark></span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>", "goodExample": "<span class=\"token keyword\">import</span> Foo <span class=\"token keyword\">from</span> <span class=\"token string\">'./Foo'</span><span class=\"token punctuation\">;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Foo</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-no-useless-fragment": { "name": "react/jsx-no-useless-fragment", "value": "error", "description": "禁止无意义的 Fragment 组件", "reason": "", "badExample": "<mark class=\"eslint-error\" data-tip=\"Fragments should contain more than one child - otherwise, there’s no need for a Fragment at all.&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-no-useless-fragment)&lt;/span&gt;\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span></span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span></span><span class=\"token punctuation\">></span></span></mark><span class=\"token punctuation\">;</span>\n<mark class=\"eslint-error\" data-tip=\"Fragments should contain more than one child - otherwise, there’s no need for a Fragment at all.&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-no-useless-fragment)&lt;/span&gt;\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Foo</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span></span><span class=\"token punctuation\">></span></span></mark><span class=\"token punctuation\">;</span>", "goodExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">foo</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">React.Fragment</span></span> <span class=\"token attr-name\">key</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>foo<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Foo</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">React.Fragment</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>", "fixable": true, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-pascal-case": { "name": "react/jsx-pascal-case", "value": "error", "description": "组件的名称必须符合 PascalCase", "reason": "", "badExample": "<span class=\"token tag\"><mark class=\"eslint-error\" data-tip=\"Imported JSX component FOO must be in PascalCase&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-pascal-case)&lt;/span&gt;\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">FOO</span></span> <span class=\"token punctuation\">/></span></mark></span><span class=\"token punctuation\">;</span>\n<span class=\"token tag\"><mark class=\"eslint-error\" data-tip=\"Imported JSX component FOO_BAR must be in PascalCase&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/jsx-pascal-case)&lt;/span&gt;\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">FOO_BAR</span></span> <span class=\"token punctuation\">/></span></mark></span><span class=\"token punctuation\">;</span>", "goodExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Foo</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">FooBar</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-props-no-spreading": { "name": "react/jsx-props-no-spreading", "value": "off", "description": "禁止使用 {...props}", "reason": "", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-sort-props": { "name": "react/jsx-sort-props", "value": "off", "description": "props 必须按字母排序", "reason": "", "badExample": "", "goodExample": "", "fixable": true, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-uses-react": { "name": "react/jsx-uses-react", "value": "error", "description": "修复 React 被误报为未使用的变量的问题(仅在开启 no-unused-vars 时有效)", "reason": "", "badExample": "<span class=\"token comment\">/* eslint no-unused-vars: \"error\", react/jsx-uses-react: \"off\" */</span>\n<span class=\"token keyword\">import</span> <mark class=\"eslint-error\" data-tip=\"&amp;apos;React&amp;apos; is defined but never used.&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(no-unused-vars)&lt;/span&gt;\">React</mark> <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>", "goodExample": "<span class=\"token comment\">/* eslint no-unused-vars: \"error\" */</span>\n<span class=\"token keyword\">import</span> React <span class=\"token keyword\">from</span> <span class=\"token string\">'react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/jsx-uses-vars": { "name": "react/jsx-uses-vars", "value": "error", "description": "修复 no-unused-vars 不检查 jsx 的问题", "reason": "", "badExample": "<span class=\"token comment\">/* eslint no-unused-vars: \"error\", \"react/jsx-uses-vars\": \"off\" */</span>\n<span class=\"token keyword\">import</span> <mark class=\"eslint-error\" data-tip=\"&amp;apos;Foo&amp;apos; is defined but never used.&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(no-unused-vars)&lt;/span&gt;\">Foo</mark> <span class=\"token keyword\">from</span> <span class=\"token string\">'./Foo'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Foo</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>", "goodExample": "<span class=\"token comment\">/* eslint no-unused-vars: \"error\" */</span>\n<span class=\"token keyword\">import</span> Foo <span class=\"token keyword\">from</span> <span class=\"token string\">'./Foo'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Foo</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/no-access-state-in-setstate": { "name": "react/no-access-state-in-setstate", "value": "off", "description": "禁止在 setState 中使用 this.state", "reason": "", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/no-adjacent-inline-elements": { "name": "react/no-adjacent-inline-elements", "value": "off", "description": "两个 inline 元素之间必须有空格,否则视觉上它们就贴在一起了", "reason": "这是样式的问题,不应该由空格约束", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/no-array-index-key": { "name": "react/no-array-index-key", "value": "off", "description": "禁止使用数组的索引作为 key", "reason": "", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/no-arrow-function-lifecycle": { "name": "react/no-arrow-function-lifecycle", "value": "off", "description": "类组件中的生命周期函数不要使用箭头函数", "reason": "", "badExample": "", "goodExample": "", "fixable": true, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/no-children-prop": { "name": "react/no-children-prop", "value": "error", "description": "禁止将 children 作为一个 prop", "reason": "", "badExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <mark class=\"eslint-error\" data-tip=\"Do not pass children as props. Instead, nest children between the opening and closing tags.&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/no-children-prop)&lt;/span&gt;\"><span class=\"token attr-name\">children</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>Hello World<span class=\"token punctuation\">\"</span></span></mark> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Foo</span></span> <mark class=\"eslint-error\" data-tip=\"Do not pass children as props. Instead, nest children between the opening and closing tags.&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/no-children-prop)&lt;/span&gt;\"><span class=\"token attr-name\">children</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Bar</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">}</span></span></mark> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">;</span>", "goodExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Hello World</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Foo</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Bar</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token plain-text\">\n</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span><span class=\"token class-name\">Foo</span></span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">;</span>", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/no-danger": { "name": "react/no-danger", "value": "off", "description": "禁止使用 dangerouslySetInnerHTML", "reason": "", "badExample": "", "goodExample": "", "fixable": false, "extendsBaseRule": "", "requiresTypeChecking": false }, "react/no-danger-with-children": { "name": "react/no-danger-with-children", "value": "error", "description": "禁止在使用了 dangerouslySetInnerHTML 的组件内添加 children", "reason": "", "badExample": "<mark class=\"eslint-error\" data-tip=\"Only set one of `children` or `props.dangerouslySetInnerHTML`&lt;br/&gt;&lt;span class='eslint-error-rule-id'&gt;eslint(react/no-danger-with-children)&lt;/span&gt;\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">dangerouslySetInnerHTML</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> __html<span class=\"token punctuation\">:</span> <span class=\"token string\">'Foo'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Hello World</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span></mark><span class=\"token punctuation\">;</span>", "goodExample": "<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">dangerouslySetInnerHTML</span><span class=\"token script language-javascript\"><span class=\"token script-punctuation punctuation\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">{</span> __html<span class=\"token punctuation\">:</span> <span class=\"token string\">'Foo'</span> <span class=\"token punctuation