diff --git a/lib/rules/no-unused-state.js b/lib/rules/no-unused-state.js
index 05bc08b29a..e05ef73cd4 100644
--- a/lib/rules/no-unused-state.js
+++ b/lib/rules/no-unused-state.js
@@ -415,7 +415,7 @@ module.exports = {
handleAssignment(node.id, node.init);
},
- MemberExpression(node) {
+ 'MemberExpression, OptionalMemberExpression'(node) {
if (!classInfo) {
return;
}
diff --git a/tests/lib/rules/no-unused-state.js b/tests/lib/rules/no-unused-state.js
index f6ded949bd..2ad25901a3 100644
--- a/tests/lib/rules/no-unused-state.js
+++ b/tests/lib/rules/no-unused-state.js
@@ -231,6 +231,28 @@ eslintTester.run('no-unused-state', rule, {
}
}`,
parser: parsers.BABEL_ESLINT
+ }, {
+ code: `
+ class OptionalChaining extends React.Component {
+ constructor() {
+ this.state = { foo: 0 };
+ }
+ render() {
+ return ;
+ }
+ }`,
+ parser: parsers['@TYPESCRIPT_ESLINT']
+ }, {
+ code: `
+ class OptionalChaining extends React.Component {
+ constructor() {
+ this.state = { foo: 0 };
+ }
+ render() {
+ return ;
+ }
+ }`,
+ parser: parsers.BABEL_ESLINT
},
`class VariableDeclarationTest extends React.Component {
constructor() {