Merge branch 'doc-improve-side-effects-block' into 'master'
Improve docs about allowing some side effects on the constructor See merge request gitlab-org/gitlab-ce!17027
This commit is contained in:
commit
721fab661d
1 changed files with 31 additions and 2 deletions
|
@ -207,10 +207,39 @@ Do not use them anymore and feel free to remove them when refactoring legacy cod
|
||||||
var c = pureFunction(values.foo);
|
var c = pureFunction(values.foo);
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Avoid constructors with side-effects
|
1. Avoid constructors with side-effects.
|
||||||
|
Although we aim for code without side-effects we need some side-effects for our code to run.
|
||||||
|
|
||||||
|
If the class won't do anything if we only instantiate it, it's ok to add side effects into the constructor (_Note:_ The following is just an example. If the only purpose of the class is to add an event listener and handle the callback a function will be more suitable.)
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
// Bad
|
||||||
|
export class Foo {
|
||||||
|
constructor() {
|
||||||
|
this.init();
|
||||||
|
}
|
||||||
|
init() {
|
||||||
|
document.addEventListener('click', this.handleCallback)
|
||||||
|
},
|
||||||
|
handleCallback() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Good
|
||||||
|
export class Foo {
|
||||||
|
constructor() {
|
||||||
|
document.addEventListener()
|
||||||
|
}
|
||||||
|
handleCallback() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
On the other hand, if a class only needs to extend a third party/add event listeners in some specific cases, they should be initialized oustside of the constructor.
|
||||||
|
|
||||||
1. Prefer `.map`, `.reduce` or `.filter` over `.forEach`
|
1. Prefer `.map`, `.reduce` or `.filter` over `.forEach`
|
||||||
A forEach will cause side effects, it will be mutating the array being iterated. Prefer using `.map`,
|
A forEach will most likely cause side effects, it will be mutating the array being iterated. Prefer using `.map`,
|
||||||
`.reduce` or `.filter`
|
`.reduce` or `.filter`
|
||||||
```javascript
|
```javascript
|
||||||
const users = [ { name: 'Foo' }, { name: 'Bar' } ];
|
const users = [ { name: 'Foo' }, { name: 'Bar' } ];
|
||||||
|
|
Loading…
Reference in a new issue