ReactJS - jak korzystać z komentarzy?

191

Jak mogę używać komentarzy w rendermetodzie w komponencie React?

Mam następujący komponent:

'use strict';
 var React = require('react'),
   Button = require('./button'),
   UnorderedList = require('./unordered-list');

class Dropdown extends React.Component{
  constructor(props) {
    super(props);
  }
  handleClick() {
    alert('I am click here');
  }

  render() {
    return (
      <div className="dropdown">
        // whenClicked is a property not an event, per se.
        <Button whenClicked={this.handleClick} className="btn-default" title={this.props.title} subTitleClassName="caret"></Button>
        <UnorderedList />
      </div>
    )
  }
}

module.exports = Dropdown;  

wprowadź opis zdjęcia tutaj

Moje komentarze pojawiają się w interfejsie użytkownika.

Jakie byłoby właściwe podejście do stosowania komentarzy jedno- i wieloliniowych w metodzie renderowania komponentu?

meDeepakJain
źródło
3
Dobre pytanie z jedną odpowiedzią. Nie daj się zwieść 12 odpowiedziom! Wszyscy mówią o tym samym:{/* JSX comment*/}
Jack Miller,

Odpowiedzi:

275

Tak więc w ramach rendermetody komentarze są dozwolone, ale aby użyć ich w JSX, musisz owinąć je w nawiasy klamrowe i używać komentarzy w stylu wieloliniowym.

<div className="dropdown">
    {/* whenClicked is a property not an event, per se. */}
    <Button whenClicked={this.handleClick} className="btn-default" title={this.props.title} subTitleClassName="caret"></Button>
    <UnorderedList />
</div>

Możesz przeczytać więcej o tym, jak komentarze działają w JSX tutaj

Henrik Andersson
źródło
Nie wiem dlaczego, ale zawsze daje mi to poczucie złego kodu lub czegoś złego w kodzie. innymi słowy, wydaje się, że komentowanie nie dostosowuje się w moim kodzie w ten sposób. Nie jestem pewien, czy byłem przyzwyczajony do //komentowania w stylu podwójnych ukośników
adi
2
I coś takiego jak <div> </div> {/ * comment * /} powoduje błąd. komentarz musi być w nowej linii.
Amir Shabani,
47

Oto inne podejście, które pozwala //na dołączanie komentarzy:

return (
  <div>
    <div>
      {
        // Your comment goes in here.
      }
    </div>
    {
      // Note that comments using this style must be wrapped in curly braces!
    }
  </div>
);

Problem polega na tym, że nie można dołączyć komentarza jednowierszowego przy użyciu tego podejścia. Na przykład to nie działa:

{// your comment cannot be like this}

ponieważ nawias zamykający }jest uważany za część komentarza i dlatego jest ignorowany, co powoduje błąd.

anandharshan
źródło
7
@LukeCarelsen To działa, ponieważ ujął //w nawiasy kwadratowe.
Martin Dawson,
22

Z drugiej strony następujący komentarz jest poprawny, pobrany bezpośrednio z działającej aplikacji:

render () {
    return <DeleteResourceButton
            //confirm
            onDelete={this.onDelete.bind(this)}
            message="This file will be deleted from the server."
           />
}

Podobnie, gdy wewnątrz nawiasów kątowych elementu JSX, //składnia jest poprawna, ale {/**/}jest niepoprawna. Następujące przerwy:

render () {
    return <DeleteResourceButton
            {/*confirm*/}
            onDelete={this.onDelete.bind(this)}
            message="This file will be deleted from the server."
           />
}
papiro
źródło
11

Oto jak.

Ważny:

...
render() {

  return (
    <p>
       {/* This is a comment, one line */}

       {// This is a block 
        // yoohoo
        // ...
       }

       {/* This is a block 
         yoohoo
         ...
         */
       }
    </p>
  )

}
...

Nieważny:

...
render() {

  return (
    <p>
       {// This is not a comment! oops! }

       {//
        Invalid comment
       //}
    </p>
  )

}
...
Mehdi Raash
źródło
11

Podsumowując, JSX nie obsługuje komentarzy, takich jak HTML lub JS:

<div>
    /* This will be rendered as text */
    // as well as this
    <!-- While this will cause compilation failure -->
</div>

a jedynym sposobem dodawania komentarzy „w” JSX jest ucieczka do JS i komentowanie tam:

<div>
    {/* This won't be rendered */}
    {// just be sure that your closing bracket is out of comment
    }
</div>

jeśli nie chcesz robić takich bzdur

<div style={{display:'none'}}>
    actually, there are other stupid ways to add "comments"
    but cluttering your DOM is not a good idea
</div>

Na koniec, jeśli chcesz utworzyć węzeł komentarzy za pomocą React, musisz być bardziej fanatyczny, sprawdź tę odpowiedź .

Jakow
źródło
7

Oprócz innych odpowiedzi można także używać komentarzy jednowierszowych tuż przed i po rozpoczęciu lub zakończeniu JSX. Oto pełne podsumowanie:

Ważny

(
  // this is a valid comment
  <div>
    ...
  </div>
  // this is also a valid comment
  /* this is also valid */
)

Gdybyśmy mieli używać komentarzy w logice renderowania JSX:

(
  <div>
    {/* <h1>Valid comment</h1> */}
  </div>
)

Podczas deklarowania rekwizytów można zastosować komentarze jednowierszowe:

(
  <div
    className="content" /* valid comment */
    onClick={() => {}} // valid comment
  >
    ...
  </div>
)

Nieważny

Podczas korzystania z komentarzy JSX w jednym wierszu lub wierszu wielowierszowym bez ich zawijania { }, komentarz zostanie wyświetlony w interfejsie użytkownika:

(
  <div>
    // invalid comment, renders in the UI
  </div>
)
Divyanshu Maithani
źródło
5
{ 
    // any valid js expression
}

Jeśli zastanawiasz się, dlaczego to działa? to dlatego, że wszystko, co znajduje się w nawiasach klamrowych {} jest wyrażeniem javascript,

więc to też dobrze:

{ /*
         yet another js expression
*/ }
Bar Horing
źródło
{//} to nie działa, sprawdziłem, czy możesz to określić, próbuję skomentować to w funkcji renderowania, działa to tylko wtedy, gdy po nawiasach klamrowych pojawi się nowa linia i ta sama sprawa dla nawiasów zamykających (powinno być na nowej linii),
IB
5

JSX Komentarze Składnia: Możesz użyć

{/** 
  your comment 
  in multiple lines
  for documentation 
**/} 

lub

{/* 
  your comment 
  in multiple lines
*/} 

komentarz do wielu wierszy. I również,

{ 
  //your comment 
} 

dla komentarza jednowierszowego.

Uwaga : składnia:

{ //your comment } 

nie działa Musisz wpisać nawiasy klamrowe w nowe linie.

Nawiasy klamrowe służą do rozróżnienia między JSX a JavaScript w komponencie React. W nawiasach klamrowych używamy składni komentarzy JavaScript.

Odniesienie: kliknij tutaj

jaka
źródło
Czy jesteś pewien, że składnia komentarza jednowierszowego jest poprawna? Twoje odniesienie tego nie pokazuje.
Tomáš Hübelbauer
Tak. Jestem pewny. Nie mogłem znaleźć referencji, ale sam to przetestowałem. Ponadto, jak wspomniałem w odpowiedzi, możemy używać składni jednowierszowej javascript w JSX przy użyciu nawiasów klamrowych.
yaksh
4

Dwa sposoby dodawania komentarzy w React Native

1) // (Double Forward Slash) służy do komentowania tylko jednego wiersza w reagującym kodzie natywnym, ale można go używać tylko poza blokiem renderującym. Jeśli chcesz komentować w bloku renderowania, w którym używamy JSX, musisz użyć drugiej metody.

2) Jeśli chcesz komentować coś w JSX, musisz użyć komentarzy JavaScript w nawiasach klamrowych, takich jak {/ comment here /}. Jest to regularne / * Blokowanie komentarzy * /, ale musi być owinięte nawiasami klamrowymi.

Skróty klawiszowe do / * Zablokuj komentarze * /:

Ctrl + / on Windows + Linux.
Cmd + / on macOS.
Ramesh R.
źródło
cześć Ramesh R, czy możesz się upewnić, że podczas edycji kodu nie zepsułeś wcięcia - jak na przykład stackoverflow.com/revisions/57358471/3 ? dzięki
Yvette - Przywróć Monikę
3

Komentarze JavaScript w JSX są analizowane jako Tekst i pojawiają się w Twojej aplikacji.

Nie możesz po prostu używać komentarzy HTML wewnątrz JSX, ponieważ traktuje je jako węzły DOM:

render() {
  return (
    <div>
      <!-- This doesn't work! -->
    </div>
  )
}

Komentarze JSX dla komentarzy jednowierszowych i wieloliniowych są zgodne z konwencją

Komentarz jednowierszowy:

{/* A JSX comment */}

Komentarze wielowierszowe:

{/* 
  Multi
  line
  comment
*/}  
Venkatesh Manohar
źródło
3

Zgodnie z dokumentacją Reacta możesz pisać komentarze w JSX w następujący sposób:

Komentarz jednowierszowy:

<div>
  {/* Comment goes here */}
  Hello, {name}!
</div>

Komentarze wieloliniowe:

<div>
  {/* It also works 
  for multi-line comments. */}
  Hello, {name}! 
</div>
Manuel Abascal
źródło