2017-11-20 168 views
5

Chciałem skrócić obiekt dosłowne w ES6 takiego:Jak naprawić błąd "prefer-destructuring" Eslint?

const loc = this.props.local; 

Powodem jest loc.foo(); jest dużo łatwiej wpisać niż this.props.local.foo();

Ale teraz ESLint narzeka:

Używaj obiektu destrukturyzacja: preferowanie destrukcji

Przeczytałem error description on eslint.org, ale nie rozumiem tego. Mają przykład, który wygląda bardzo podobnie do mojego kodu, ale ich wydaje się być w porządku?

var foo = object.bar; 

Jak mogę naprawić błąd, nie ignorując go w pliku .eslintrc?

+0

To zasada, że ​​trzeba * włączyć * w pierwszej kolejności. Dlaczego to zrobiłeś, jeśli ci się nie podoba? – Bergi

+1

To nie prawda. Jeśli ktoś rozszerzy czyjąś konfigurację, może będziesz musiał wyłączyć tę regułę. – merlinpatt

+1

Przepraszam, zapomniałem wspomnieć, że używam Airbnb styleguide – Timo

Odpowiedz

10

zmienić kod:

const local = this.props.local; 

do:

const { local } = this.props; 

są równoważne i można zadzwonić local.foo() w ten sam sposób. z wyjątkiem tego drugiego obiektu destrukturyzacji obiektu.

+1

Dzięki, że to się udało. Zastanawiam się, dlaczego styleguide Airbnb uważa to za ważne. Imho to sprawia, że ​​rzeczy są bardziej skomplikowane. – Timo

+0

Jest to funkcja ES6 używana do rozpakowywania zmiennych z tablic lub obiektów. ta składnia tworzy tablicę ze zmiennych: 'var x = [y, z]'. przypisanie destruktury używa podobnej składni, ale po lewej stronie przypisania, aby określić wartości do rozpakowania ze zmiennej źródłowej. var [y, z] = x. to samo dotyczy obiektów. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment. To jest to! –

+1

Tak, to ma sens dla wydobywania wielu wartości, ale nie dla pojedynczego. Airbnb styleguide jest nieco surowe w tym miejscu imho. – Timo

1

Jest to nowa konstrukcja w ES 6, która pozwala dopasować właściwość obiektu do zadania. Składnia, której potrzebujesz, to: const { local: loc } = this.props

co tłumaczy się na: "zadeklaruj stałą lokalizację i przypisz jej wartość właściwości local z this.props".

0

To mówienie do korzystania

const {props: {local: loc}} = this; 
+1

Jest to o wiele brzydsze i bardziej zagmatwane niż zwykłe uzyskiwanie dostępu do nieruchomości. –

+0

@MartinDawson Zgadzam się, ale musisz powiedzieć, że osoba, która włączyła regułę "preferuj-destrukcję" swojego dostawcy, :-) – Bergi