2015-05-27 5 views
6

किसी कारण से मेरे ऑनक्लिक हैंडलर मेरे यूआरएल पर एक खाली क्वेरी पैराम जोड़ रहे हैं जब मैं उन्हें क्लिक करता हूं। मैं इवेंट हैंडलर को event.preventDefault जोड़कर इस मुद्दे को ठीक करने में सक्षम था, लेकिन मैं बेहतर ढंग से समझना चाहता हूं कि वास्तव में क्या हुआ और यदि यह सही समाधान था। संदर्भ के लिए नीचे दिए गए कोड कुछ OAuth 2 कार्यक्षमता का परीक्षण करने के लिए एक साधारण घटक है। ऑनक्लिक हैंडलर केवल एक रिफ्लक्स क्रिया को ट्रिगर करते हैं। आप देखेंगे कि मैंने उन सभी को e.preventDefault() जोड़ा है। उस फिक्स के बिना, जब भी मैं उन कार्यों में से किसी एक को ट्रिगर करता हूं तो मेरा यूआरएल http://localhost:3000/#/signIn से http://localhost:3000/?#/signIn में बदल जाएगा। मैं प्रतिक्रिया-राउटर का भी उपयोग कर रहा हूं।प्रतिक्रिया पर क्लिक क्यों क्लिक करें मेरे यूआरएल पर एक प्रश्न चिह्न संलग्न करें?

// dependencies ------------------------------------------------------- 

import React from 'react'; 
import hello from '../../libs/hello'; 
import Actions from '../../actions/Actions'; 
import UserStore from '../../stores/userStore'; 

var Signin = React.createClass({ 

// life cycle events -------------------------------------------------- 

    componentDidMount: function() { 

    }, 

    render: function() { 
     return (
      <form> 
       <h2>Sign in with Google</h2> 
       <button className="btn btn-primary" onClick={this._signIn} > 
        <i className="fa fa-google" /> 
        <span> Google</span> 
       </button> 
       <button className="btn btn-info" onClick={this._logToken} >Log Token</button> 
       <button className="btn btn-warning" onClick={this._signOut}>Sign Out</button> 
      </form> 
     ); 

    }, 

// custom methods ----------------------------------------------------- 

    _signIn: function (e) { 
     e.preventDefault(); 
     Actions.signIn(); 
    }, 

    _signOut: function (e) { 
     e.preventDefault(); 
     Actions.signOut(); 
    }, 

    _logToken: function (e) { 
    // e.preventDefault(); 
     Actions.logToken(); 
    } 

}); 

export default Signin; 

उत्तर

17

एक button टैग के डिफ़ॉल्ट प्रकार button पर क्लिक (अपने यूआरएल को ? जोड़कर) अपने प्रपत्र प्रस्तुत करेगा जिसका अर्थ है submit है।

अपने उदाहरण सुलझाने के लिए आपको अपने बटन & को type="button" जोड़ सकते हैं/या बदलने के अपने साथ <form> एक <div>/<span> (के बाद से अपने कोड वास्तव में form तत्व की जरूरत नहीं लगता है)।

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button

संभावित मान हैं:

  • सबमिट करें: बटन सर्वर पर फ़ॉर्म डेटा सबमिट करता है। यह डिफ़ॉल्ट है यदि विशेषता निर्दिष्ट नहीं है, या यदि विशेषता
    गतिशील रूप से खाली या अमान्य मान में बदल दी गई है।
  • रीसेट: बटन सभी नियंत्रणों को उनके प्रारंभिक मानों पर रीसेट करता है।
  • बटन: बटन का कोई डिफ़ॉल्ट व्यवहार नहीं है। इसमें तत्व-घटनाओं से जुड़े क्लाइंट-साइड स्क्रिप्ट हो सकते हैं, जो घटनाएं होने पर ट्रिगर होती हैं।
+0

धन्यवाद। यह बहुत उपयोगी था। – Constellates

6

मैं बहुत यकीन है कि जब से तुम एक रूप से एक बटन क्लिक, preventDefault बिना() पर कब्जा कर रहे हैं प्रपत्र पोस्ट की जा रही हूँ। चूंकि फॉर्म में कोई इनपुट नहीं है, इसलिए कोई क्वेरी पैरामीटर नहीं हैं। चूंकि फॉर्म POST विधि निर्दिष्ट नहीं करता है, इसलिए यह एक अनुरोध प्राप्त कर रहा है जो एक खाली क्वेरी स्ट्रिंग जोड़ रहा है। PreventDefault() के साथ आप फॉर्म सबमिट कर रहे हैं कार्रवाई सबमिट करें।

संबंधित मुद्दे