2015-09-09 13 views
6

Brakuje mi czegoś. Oto bardzo prosty świat cześć, celem jest tylko uruchomienie zdarzenia alertowego onClick. Zdarzenie jest uruchamiane po załadowaniu strony, ale nie po kliknięciu przycisku. Doceniam pomoc. Oto jsFiddle aby łatwiej zobaczyć: jsFiddleReact onClick event

var Hello = React.createClass({ 
render: function() { 
    return <button onClick={alert("Hello World!")}> 
       Click Me 
      </button>; 
} 
React.render(<Hello />, document.getElementById('container')); 

Odpowiedz

12

myślę, że będzie o to źle, bo jest po prostu ReactJS JavaScript Nie sądzę swój sposób wypalania zdarzenie to będzie działać. Twój onClick powinien uruchomić funkcję dołączoną do twojego elementu React, tak jak to.

var Hello = React.createClass({ 
    myClick: function() { 
     alert("Hello World!"); 
    }, 
    render: function() { 
     return <button onClick={this.myClick}> 
        Click Me 
       </button>; 
    } 
}); 

React.render(<Hello />, document.getElementById('container')); 
+1

Dzięki @ Chris-Hawkes, który działa. Próbowałem już czegoś podobnego, ale to zepchnęło mnie na złą drogę. Jeszcze raz dziękuję –

+0

bez problemu, powodzenia i dziękuję za zaznaczenie odpowiedzi jako zaakceptowanej! –

+0

Ten kod Reag wydaje się nie działać w Codepen w 2018. Zmieniłem React.render na ReactDOM.render, ale nadal nie wyświetla się żaden przycisk na stronie. –

0

Teraz rozumiem, dlaczego wcześniej miałem problem. Problem pojawił się, gdy próbowałem przekazać argument do funkcji:

var Hello = React.createClass({ 
    myClick: function (text) { 
     alert(text); 
    }, 
    render: function() { 
     return <button onClick={this.myClick("Hello world")}> 
        Click Me 
       </button>; 
    } 
}); 

Zachowuje się tak samo jak oryginalny kod.

2

Jeśli funkcja ma być prowadzony parametry, to musi być związana z funkcją następująco:

var Hello = React.createClass({ 
    handleClick: function (text) { 
     alert(text) 
    }, 

    render: function() { 
     return <button onClick = { 
      this.handleClick.bind(null, "Hello World") 
     } > Click Me < /button>; 
    } 
}); 

React.render(<Hello/> , document.getElementById('container')); 

to sens teraz. Jeszcze raz dziękuję @ Chris-Hawkes za skierowanie mnie we właściwym kierunku.

7

Uwaga: jest to kolejny sposób, aby to zrobić, jeśli chcesz coś szybko/inline:

<button onClick={()=>{ alert('alert'); }}>alert</button> 
+0

OnClick będzie ostrzegał, gdy tylko załaduję stronę. zamiast robić onClick = {thisFunc()} po prostu wykonaj onClick = {() => thisFunc} –