См. соответствующие стильные руководства для наших руководств и информации о проверке кода:
Мы следуем Airbnb по большинству стилевых конвенциям и применяем их с помощью eslint.
См. наш текущий .eslintrc для конкретных правил и шаблонов.
Никогда не отключайте правила ESLint, если у вас нет веской причины.
Вы можете увидеть много старых файлов с /* eslint-disable some-rule, some-other-rule */
в начале, но старые файлы являются исключением. В любое время, когда вы разрабатываете новую функцию или
переопределяете существующую, вы должны соблюдать правила ESLint.
Никогда, никогда, никогда не отключайте ESLint глобально для файла
// плохой
/* eslint-disable */
// лучше
/* eslint-disable some-rule, some-other-rule */
// лучшее
// ничего :)
// плохой
/* eslint-disable no-new */
import Foo from 'foo';
new Foo();
// лучше
import Foo from 'foo';
// eslint-disable-next-line no-new
new Foo();
// плохой
/* global Foo */
/* eslint-disable no-new */
import Bar from './bar';
``` // лучше
/* eslint-disable no-new */
/* global Foo */
import Bar from './bar';
Никогда не отключайте правило no-undef
. Объявляйте глобальные переменные с /* global Foo */
вместо этого.
При объявлении нескольких глобальных переменных всегда используйте одну строку /* global [name] */
на каждую переменную.
// плохой
/* globals Flash, Cookies, jQuery */
// лучше
/* global Flash */
/* global Cookies */
/* global jQuery */
// плохой
fn(p1, p2, p3, p4) {}
// лучше
fn(options) {}
// плохое
require('foo'); // хорошее
import Foo from 'foo';
// плохое
module.exports = Foo;
// хорошее
export default Foo;
~
В app/assets/javascripts:
// плохое
import Foo from '~/foo'
// хорошее
import Foo from '../foo';
В spec/javascripts:
// плохое
import Foo from '../../app/assets/javascripts/foo'
// хорошее
import Foo from '~/foo';
// плохое
window.MyClass = class { /* ... */ };
// хорошее
export default class MyClass { /* ... */ }
// плохое
export default class MyClass { /* ... */ }
document.addEventListener("DOMContentLoaded", function(event) {
new MyClass();
});
// плохое
const values = {foo: 1};
function impureFunction(items) {
const bar = 1;
items.foo = items.a * bar + 2;
return items.a;
}
const c = impureFunction(values);
// хорошее
var values = {foo: 1};
function pureFunction(foo) {
var bar = 1;
foo = foo * bar + 2;
return foo;
}
var c = pureFunction(values.foo);
Избегайте конструкторов с побочными эффектами
Предпочитайте .map
, .reduce
или .filter
вместо .forEach
Метод forEach
вызывает побочные эффекты, он изменяет массив, который итерируется. Предпочтительнее использовать .map
, .reduce
или .filter
const users = [ { name: 'Foo' }, { name: 'Bar' } ];
// плохое
users.forEach((user, index) => {
user.id = index;
});
// хорошее
const usersWithId = users.map((user, index) => {
return Object.assign({}, user, { id: index });
});
parseInt()
предпочтительнее Number()
или +
// плохое
+'10' // 10
// хороший
Number('10') // 10
// лучше
parseInt('10', 10);
```#### CSS классы, используемые для JavaScript
1. Если класс используется в JavaScript, его следует дополнить префиксом `js-`
```html
<!-- плохой -->
<button class="add-user">
Добавить пользователя
</button>``` // хороший
<button class="js-add-user">
Добавить пользователя
</button>
// плохой
class {
init() {
new Component({})
}
}
// хороший
document.addEventListener('DOMContentLoaded', () => new Vue({
el: '#element',
components: {
componentName
},
render: createElement => createElement('component-name'),
}));
// плохой
class Store {
constructor() {
if (!this.prototype.singleton) {
// делайте что-то
}
}
}
// хороший
class Store {
constructor() {
// делайте что-то
}
}
.vue
для Vue-компонентов. // хороший
import cardBoard from 'cardBoard'
components: {
cardBoard:
};
// плохой
<component class="btn">
// хороший
<component css-class="btn">
// плохой
<component myProp="prop" />
// хороший
<component my-prop="prop" />
// плохой
<component v-if="bar"
param="baz" />
``` <button class="btn">Нажми меня</button>
// хороший
<component
v-if="bar"
param="baz"
/>
<button class="btn">
Нажми меня
</button>
// если props помещаются в одну строку, оставьте их на одной строке
<component bar="bar" />
```#### Цитаты
1. В шаблонах всегда используйте двойные кавычки `"` и одинарные кавычки `'` для всех остальных JS.
```javascript
// плохо
template: `
<button :class='style'>Button</button>
`
// хорошо
template: `
<button :class="style">Button</button>
`
// плохо
props: ['foo']
// хорошо
props: {
foo: {
type: String,
required: false,
default: 'bar'
}
}
required
всегда должен быть предоставлен при объявлении пропса // плохо
props: {
foo: {
type: String,
}
}
// хорошо
props: {
foo: {
type: String,
required: false,
default: 'bar'
}
}
default
всегда должен быть предоставлен, если пропс не является обязательным: // плохо
props: {
foo: {
type: String,
required: false,
}
}
// хорошо
props: {
foo: {
type: String,
required: false,
default: 'bar'
}
}
// хорошо
props: {
foo: {
type: String,
required: true
}
}
data
всегда должен быть функцией // плохо
data: {
foo: 'foo'
}
// хорошо
data() {
return {
foo: 'foo'
};
}
@
предпочтительнее v-on
// плохо
<component v-on:click="eventHandler"/>
``` // хорошо
<компонент @click="eventHandler"/>
:
предпочтительнее v-bind
// плохо
<компонент v-bind:class="btn"/>
// хорошо
<компонент :class="btn"/>
// плохо
<компонент></компонент>
// хорошо
<компонент />
name
props
mixins
data
components
computedProps
methods
beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
activated
deactivated
beforeDestroy
destroyed
has-tooltip
для Vue компонентов // плохо
<span
class="has-tooltip"
title="Some tooltip text">
Text
</span>
// хорошо
<span
v-tooltip
title="Некоторый текст подсказки">
Текст
</span>
Подсказки: При использовании подсказки включите директиву подсказки, ./app/assets/javascripts/vue_shared/directives/tooltip.js
Не изменяйте data-original-title
.
// плохо
<span data-original-title="текст подсказки">Foo</span>
// хорошо
<span title="текст подсказки">Foo</span>
$('span').tooltip('fixTitle');
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )