123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- /**
- * @fileoverview Prevent usage of setState in componentWillUpdate
- * @author Yannick Croissant
- */
- 'use strict';
- // ------------------------------------------------------------------------------
- // Requirements
- // ------------------------------------------------------------------------------
- const rule = require('../../../lib/rules/no-will-update-set-state');
- const RuleTester = require('eslint').RuleTester;
- const parserOptions = {
- ecmaVersion: 2018,
- sourceType: 'module',
- ecmaFeatures: {
- jsx: true
- }
- };
- require('babel-eslint');
- // ------------------------------------------------------------------------------
- // Tests
- // ------------------------------------------------------------------------------
- const ruleTester = new RuleTester({parserOptions});
- ruleTester.run('no-will-update-set-state', rule, {
- valid: [{
- code: `
- var Hello = createReactClass({
- render: function() {
- return <div>Hello {this.props.name}</div>;
- }
- });
- `
- }, {
- code: `
- var Hello = createReactClass({
- componentWillUpdate: function() {}
- });
- `
- }, {
- code: `
- var Hello = createReactClass({
- componentWillUpdate: function() {
- someNonMemberFunction(arg);
- this.someHandler = this.setState;
- }
- });
- `
- }, {
- code: `
- var Hello = createReactClass({
- componentWillUpdate: function() {
- someClass.onSomeEvent(function(data) {
- this.setState({
- data: data
- });
- })
- }
- });
- `
- }, {
- code: `
- var Hello = createReactClass({
- componentWillUpdate: function() {
- function handleEvent(data) {
- this.setState({
- data: data
- });
- }
- someClass.onSomeEvent(handleEvent)
- }
- });
- `,
- parser: 'babel-eslint'
- }],
- invalid: [{
- code: `
- var Hello = createReactClass({
- componentWillUpdate: function() {
- this.setState({
- data: data
- });
- }
- });
- `,
- errors: [{
- message: 'Do not use setState in componentWillUpdate'
- }]
- }, {
- code: `
- class Hello extends React.Component {
- componentWillUpdate() {
- this.setState({
- data: data
- });
- }
- }
- `,
- parser: 'babel-eslint',
- errors: [{
- message: 'Do not use setState in componentWillUpdate'
- }]
- }, {
- code: `
- var Hello = createReactClass({
- componentWillUpdate: function() {
- this.setState({
- data: data
- });
- }
- });
- `,
- options: ['disallow-in-func'],
- errors: [{
- message: 'Do not use setState in componentWillUpdate'
- }]
- }, {
- code: `
- class Hello extends React.Component {
- componentWillUpdate() {
- this.setState({
- data: data
- });
- }
- }
- `,
- parser: 'babel-eslint',
- options: ['disallow-in-func'],
- errors: [{
- message: 'Do not use setState in componentWillUpdate'
- }]
- }, {
- code: `
- var Hello = createReactClass({
- componentWillUpdate: function() {
- someClass.onSomeEvent(function(data) {
- this.setState({
- data: data
- });
- })
- }
- });
- `,
- options: ['disallow-in-func'],
- errors: [{
- message: 'Do not use setState in componentWillUpdate'
- }]
- }, {
- code: `
- class Hello extends React.Component {
- componentWillUpdate() {
- someClass.onSomeEvent(function(data) {
- this.setState({
- data: data
- });
- })
- }
- }
- `,
- parser: 'babel-eslint',
- options: ['disallow-in-func'],
- errors: [{
- message: 'Do not use setState in componentWillUpdate'
- }]
- }, {
- code: `
- var Hello = createReactClass({
- componentWillUpdate: function() {
- if (true) {
- this.setState({
- data: data
- });
- }
- }
- });
- `,
- errors: [{
- message: 'Do not use setState in componentWillUpdate'
- }]
- }, {
- code: `
- class Hello extends React.Component {
- componentWillUpdate() {
- if (true) {
- this.setState({
- data: data
- });
- }
- }
- }
- `,
- parser: 'babel-eslint',
- errors: [{
- message: 'Do not use setState in componentWillUpdate'
- }]
- }, {
- code: `
- var Hello = createReactClass({
- componentWillUpdate: function() {
- someClass.onSomeEvent((data) => this.setState({data: data}));
- }
- });
- `,
- parser: 'babel-eslint',
- options: ['disallow-in-func'],
- errors: [{
- message: 'Do not use setState in componentWillUpdate'
- }]
- }, {
- code: `
- class Hello extends React.Component {
- componentWillUpdate() {
- someClass.onSomeEvent((data) => this.setState({data: data}));
- }
- }
- `,
- parser: 'babel-eslint',
- options: ['disallow-in-func'],
- errors: [{
- message: 'Do not use setState in componentWillUpdate'
- }]
- }]
- });
|