React.js에서 onSubmit 설정


97

양식을 제출할 doSomething()때 기본 게시 동작 대신 시도하고 있습니다.

분명히 React에서 onSubmit은 양식에 대해 지원되는 이벤트입니다. 그러나 다음 코드를 시도하면 :

var OnSubmitTest = React.createClass({
    render: function() {
        doSomething = function(){
           alert('it works!');
        }

        return <form onSubmit={doSomething}>
        <button>Click me</button>
        </form>;
    }
});

메서드 doSomething()가 실행되지만 이후에도 기본 게시 동작이 수행됩니다.

jsfiddle 에서 이것을 테스트 할 수 있습니다 .

내 질문 : 기본 게시 동작을 어떻게 방지합니까?

답변:


118

당신의에서 doSomething()기능, 이벤트 전달 e및 사용 e.preventDefault().

doSomething = function (e) {
    alert('it works!');
    e.preventDefault();
}

18
당신이 e.preventDefault () 또는 e.stopPropagation ()를 사용해야합니다 그래서 V0.13로, 이벤트 핸들러에서 복귀 거짓은 무시됩니다
joshuaegclark

1
대답했듯이 후자가 선호됩니다.
Henrik Andersson

나는 당신이 전자를 의미한다고 생각합니다
Shark Lasers

@SharkLasers 더 이상 사용할 수없는이 게시물의 편집 내용에 대한 댓글입니다.
Henrik Andersson

충분히 공평하지만 더 이상 관련이없는 댓글은 삭제해야합니다.
Shark Lasers

46

또한 이벤트 처리기를 렌더링 외부로 이동하는 것이 좋습니다.

var OnSubmitTest = React.createClass({

  submit: function(e){
    e.preventDefault();
    alert('it works!');
  }

  render: function() {
    return (
      <form onSubmit={this.submit}>
        <button>Click me</button>
      </form>
    );
  }
});

1
이것은 컴포넌트에서 폼을 사용하는 적절한 방법입니다. :)
holms

15
<form onSubmit={(e) => {this.doSomething(); e.preventDefault();}}></form>

그것은 나를 위해 잘 작동합니다


5

이벤트를 함수에 인수로 전달한 다음 기본 동작을 방지 할 수 있습니다.

var OnSubmitTest = React.createClass({
        render: function() {
        doSomething = function(event){
           event.preventDefault();
           alert('it works!');
        }

        return <form onSubmit={this.doSomething}>
        <button>Click me</button>
        </form>;
    }
});

2
내 경우, 함께 및없이 작동 this: {this.doSomething}{doSomething}때문에 벌금이다 doSomethingwithing에있다 render().
starikovs
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.