Я работаю над проектом, который создает приложение ES6 React с Webpacker. Мы используем ESLint для поддержания чистоты в наших скриптах с помощью некоторых хуков перед фиксацией, но есть одна проблема, которую я не смог решить. У нас есть пара подклассов React.Component
, которые мы используем, и ESLint не определяет их как Components
.
Пример компонентов:
/* AsyncComponent.jsx */
export default class AsyncComponent extends React.Component {
// Sub-classes will define _render() instead of render()
render() {
if (this.isLoaded()) {
this._render();
}
}
// "Virtual" functions which must be defined by sub-class
// isLoaded() {}
// load() {}
// _render() {}
}
/* MyComponent.jsx */
export default class MyComponent extends AsyncComponent {
// This works, but is not parsed as a Component by ESLint
// Define our "virtual" AsyncComponent functions
isLoaded() {}
load() {}
_render() {}
}
МОЙ ВОПРОС: Я хотел бы знать, можно ли настроить ESLint для обнаружения AsyncComponent
подклассов, таких как MyComponent
, как React.Component
подклассов и применять те же правила, что и это было бы для других Components
.
БОНУСНЫЙ ВОПРОС: Это может вызвать проблему с методом _render()
, который используется в этом конкретном примере, поэтому было бы также полезно, если бы я мог переопределить правила eslint-реагировать, чтобы ожидать _render()
вместо render()
в AsyncComponent
подклассах.
Соответствующие зависимости от package.json
:
"eslint": "^5.11.1",
"eslint-config-airbnb": "^17.1.0",
"eslint-plugin-import": "^2.14.0",
"eslint-plugin-jsx-a11y": "^6.1.2",
"eslint-plugin-react": "^7.12.2",
"eslint-plugin-promise": "^4.0.1",
"eslint-plugin-react-redux": "^3.0.1",
"react": "^16.7.0",
"react-dom": "^16.7.0",
"react-redux": "^6.0.0",
"redux": "^4.0.1",
Соответствующая конфигурация от .eslintrc
:
"extends": [
"airbnb",
"plugin:react-redux/recommended",
"plugin:promise/recommended"
],
"parser": "babel-eslint",
"parserOptions": {
"ecmaVersion": 8,
"ecmaFeatures": {
"experimentalObjectRestSpread": true,
"impliedStrict": true,
"classes": true
}
},
"env": {
"browser": true,
"node": true,
"jquery": true,
"jest": true
},
"plugins": [
"react-redux",
"promise"
],