Skip to content

Commit 0c24de4

Browse files
committed
Merge pull request #22 from benmosher/master
Allow this.getState references (not calls) in lifecycle methods.
2 parents d79eadc + e42ba31 commit 0c24de4

File tree

4 files changed

+44
-8
lines changed

4 files changed

+44
-8
lines changed

lib/rules/no-did-mount-set-state.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,20 @@ module.exports = function(context) {
1616

1717
return {
1818

19-
'MemberExpression': function(node) {
20-
if (node.object.type !== 'ThisExpression' || node.property.name !== 'setState') {
19+
'CallExpression': function(node) {
20+
var callee = node.callee;
21+
if (callee.type !== 'MemberExpression') {
2122
return;
2223
}
23-
var ancestors = context.getAncestors(node);
24+
if (callee.object.type !== 'ThisExpression' || callee.property.name !== 'setState') {
25+
return;
26+
}
27+
var ancestors = context.getAncestors(callee);
2428
for (var i = 0, j = ancestors.length; i < j; i++) {
2529
if (ancestors[i].type !== 'Property' || ancestors[i].key.name !== 'componentDidMount') {
2630
continue;
2731
}
28-
context.report(node, 'Do not use setState in componentDidMount');
32+
context.report(callee, 'Do not use setState in componentDidMount');
2933
}
3034
}
3135
};

lib/rules/no-did-update-set-state.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,20 @@ module.exports = function(context) {
1616

1717
return {
1818

19-
'MemberExpression': function(node) {
20-
if (node.object.type !== 'ThisExpression' || node.property.name !== 'setState') {
19+
'CallExpression': function(node) {
20+
var callee = node.callee;
21+
if (callee.type !== 'MemberExpression') {
2122
return;
2223
}
23-
var ancestors = context.getAncestors(node);
24+
if (callee.object.type !== 'ThisExpression' || callee.property.name !== 'setState') {
25+
return;
26+
}
27+
var ancestors = context.getAncestors(callee);
2428
for (var i = 0, j = ancestors.length; i < j; i++) {
2529
if (ancestors[i].type !== 'Property' || ancestors[i].key.name !== 'componentDidUpdate') {
2630
continue;
2731
}
28-
context.report(node, 'Do not use setState in componentDidUpdate');
32+
context.report(callee, 'Do not use setState in componentDidUpdate');
2933
}
3034
}
3135
};

tests/lib/rules/no-did-mount-set-state.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,20 @@ eslintTester.addRuleTest('lib/rules/no-did-mount-set-state', {
4040
ecmaFeatures: {
4141
jsx: true
4242
}
43+
}, {
44+
code: '\
45+
var Hello = React.createClass({\
46+
componentDidMount: function() {\
47+
someNonMemberFunction(arg);\
48+
this.someHandler = this.setState;\
49+
},\
50+
render: function() {\
51+
return <div>Hello {this.props.name}</div>;\
52+
}\
53+
});',
54+
ecmaFeatures: {
55+
jsx: true
56+
}
4357
}
4458
],
4559

tests/lib/rules/no-did-update-set-state.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,20 @@ eslintTester.addRuleTest('lib/rules/no-did-update-set-state', {
4040
ecmaFeatures: {
4141
jsx: true
4242
}
43+
}, {
44+
code: '\
45+
var Hello = React.createClass({\
46+
componentDidUpdate: function() {\
47+
someNonMemberFunction(arg);\
48+
this.someHandler = this.setState;\
49+
},\
50+
render: function() {\
51+
return <div>Hello {this.props.name}</div>;\
52+
}\
53+
});',
54+
ecmaFeatures: {
55+
jsx: true
56+
}
4357
}
4458
],
4559

0 commit comments

Comments
 (0)