2016-05-17 21 views
5

Jeśli mam tylko podstawowe formularze, czy powinienem nadal this.refs lub po prostu przejść z document.getElementById?reactjs this.refs vs document.getElementById

podstawowymi mam na myśli coś takiego:

export default class ForgetPasswordComponent extends React.Component { 
    constructor(props) { 
    super(props); 

    this.handleSendEmail = this.handleSendEmail.bind(this); 
    } 

    handleSendEmail(e) { 
    e.preventDefault(); 

    // this.refs.email.value 
    // document.getElementById('email').value 
    } 

    render() { 
    <form onSubmit={this.handleSendEmail}> 
     <input id="email" ref="email" type="text" /> 
     <input type="submit" /> 
    </form> 
    } 
} 

Czy istnieje minusem w użyciu jednego nad drugim?

+0

Jeśli masz wiele instancji ForgetPasswordComponent na jednej stronie lub masz inne elementy z identyfikatorem "e-mail", istnieje szansa, że ​​zostanie wybrany niewłaściwy element. – Isuru

+0

Jeśli sprawię, że identyfikatory będą tak unikalne, jak to tylko możliwe (skoro identyfikatory id powinny być unikatowe w html), czy nadal powinienem szukać referencji lub identyfikatorów? Czy jest jakiś minus użycia refingów? – index

+0

powiązane: http://stackoverflow.com/questions/38093760/in-react-js-jest-ne-funkcje-podobne-poprawka-dokumentu-getelementbyid-in-ja –

Odpowiedz

7

Ogólnie rzecz biorąc, refs jest lepszy niż document.getElementById, ponieważ jest bardziej zgodny z resztą kodu reakcji.

Reagując, każda klasa komponentu może mieć wiele instancji składnika.
I jak @Isuru wskazuje na komentarze: używanie id jest niebezpieczne, ponieważ reagowanie nie zapobiega wyświetlaniu wielu formularzy na 1 stronie, a następnie DOM zawiera wiele danych wejściowych o tym samym identyfikatorze. A to nie jest dozwolone.

Kolejną zaletą korzystania z plików referencyjnych jest to, że zgodnie z projektem można uzyskać dostęp do informacji tylko w kontekście, w którym zostały zdefiniowane. Zmusza to do użycia rekwizytów i stanów (i ewentualnie zapisów), jeśli potrzebujesz dostępu do informacji poza tym kontekstem.
I to jest zaletą, ponieważ istnieje mniejsza/żadna szansa na złamanie jednokierunkowego przepływu danych, co spowodowałoby, że twój kod byłby mniej zarządzalny.

UWAGA: W prawie wszystkich przypadkach można całkowicie pominąć informacje. Jest to zasada projektowa dla Netflix do korzystania z bez referencji, nigdy, jak wyjaśniono przez Steve'a McGuire (Starszy inżynier interfejsu użytkownika w Netflix) w this video from reactjs conf 2016 (9: 58m do wideo).
W twoim przypadku oznaczałoby to wprowadzenie wartości wejściowej wiadomości e-mail w formie formularza, dodanie funkcji onChange i użycie wartości stanu w zdarzeniu submit.

+0

+1 za wzmiankę o tym, że w większości przypadków nie trzeba używać żadnego z nich, ale należy użyć wartości + onChange (lub LinkedStateMixin). –

+0

Przeczytałem o używaniu stanu i jestem po prostu nieco niezdecydowany, aby go użyć ze względu na wiele implementacji, takich jak dodanie 'value',' onchangevalue', 'state' oraz gdy w formularzu jest dużo pól zaczniesz mieć ich dużo. Hehe. Czy naprawdę preferuje się wykorzystanie wartości + stan + zmiany? – index

+0

Tak, jest to preferowane w stosunku do ref. Refs są skrótem i mogą skłonić Cię do debugowania koszmaru, gdy twoja aplikacja rośnie. – wintvelt