2016-02-09 18 views
20

मैं यह त्रुटि Uncaught TypeError हो रही है की संपत्ति 'राज्य' पढ़ा नहीं जा सकता: जब भी मैं AuthorForm के इनपुट बॉक्स में कुछ भी लिखने अपरिभाषित की संपत्ति 'राज्य' नहीं पढ़ सकता। मैं ES7 के साथ प्रतिक्रिया का उपयोग कर रहा हूँ।ES7 के साथ प्रतिक्रिया: Uncaught TypeError: अपरिभाषित

त्रुटि पर प्रबंधित होता है ManageAuthorPage में setAuthorState फ़ंक्शन की तीसरी पंक्ति। कोड की उस पंक्ति के बावजूद अगर मैं setAuthorState में console.log (this.state.author) डालता हूं, तो यह console.log पर रुक जाएगा और त्रुटि को कॉल करेगा।

इंटरनेट पर किसी और के लिए समान समस्या नहीं मिल सकती है। यहाँ

import React, { Component } from 'react'; 
import AuthorForm from './authorForm'; 

class ManageAuthorPage extends Component { 
    state = { 
    author: { id: '', firstName: '', lastName: '' } 
    }; 

    setAuthorState(event) { 
    let field = event.target.name; 
    let value = event.target.value; 
    this.state.author[field] = value; 
    return this.setState({author: this.state.author}); 
    }; 

    render() { 
    return (
     <AuthorForm 
     author={this.state.author} 
     onChange={this.setAuthorState} 
     /> 
    ); 
    } 
} 

export default ManageAuthorPage 

और AuthorForm कोड है::

यहाँ ManageAuthorPage कोड है

import React, { Component } from 'react'; 

class AuthorForm extends Component { 
    render() { 
    return (
     <form> 
       <h1>Manage Author</h1> 
     <label htmlFor="firstName">First Name</label> 
       <input type="text" 
        name="firstName" 
      className="form-control" 
        placeholder="First Name" 
      ref="firstName" 
      onChange={this.props.onChange} 
        value={this.props.author.firstName} 
      /> 
     <br /> 

     <label htmlFor="lastName">Last Name</label> 
       <input type="text" 
        name="lastName" 
      className="form-control" 
        placeholder="Last Name" 
      ref="lastName" 
        onChange={this.props.onChange} 
      value={this.props.author.lastName} 
        /> 

       <input type="submit" value="Save" className="btn btn-default" /> 
      </form> 
    ); 
    } 
} 

export default AuthorForm 

उत्तर

27

आप संदर्भ को दूर करने के अपने ईवेंट हैंडलर्स बाध्य करने के लिए है (this):

onChange={this.setAuthorState.bind(this)} 
+0

setAuthorState विधि मैं अपने उदाहरण दोस्त का इस्तेमाल किया के लिए this स्थापित करना चाहिए। धन्यवाद। – Khpalwalk

+0

@ खपलवाक आपका स्वागत है :-) – madox2

+2

मुझे ऐसा करने का एक और अधिक स्पष्ट तरीका मिलता है जो तीर फ़ंक्शंस का उपयोग करके होता है जो इसे मूल रूप से फ़ंक्शन से जोड़ता है, मुझे प्रतिक्रिया कोड लिखते समय यह विशेष रूप से उपयोगी लगता है। तो आप setAuthorState = event => {...} का उपयोग कर सकते हैं। समारोह में इसे बांधने के लिए कोड की कोई अतिरिक्त लाइन आवश्यक नहीं है। साथ ही, हर बार इस घटक पर क्लिक किया जाता है, इसे बाध्य करने की अतिरिक्त लागत की आवश्यकता नहीं होती है। –

11

आप

class ManageAuthorPage extends Component { 

    state = { 
    author: { id: '', firstName: '', lastName: '' } 
    }; 

    constructor(props) { 
    super(props); 
    this.setAuthorState = this.setAuthorState.bind(this); 
    } 

    setAuthorState(event) { 
    let field = event.target.name; 
    let value = event.target.value; 
    this.state.author[field] = value; 
    return this.setState({author: this.state.author}); 
    }; 

    render() { 
    return (
     <AuthorForm 
     author={this.state.author} 
     onChange={this.setAuthorState} 
     /> 
    ); 
    } 
} 
+0

क्या आप समझा सकते हैं कि ऐसा क्यों है ?? 'this.setAuthorState = this.setAuthorState.bind (यह); 'इसे बांधने की आवश्यकता क्यों है? – Ponciusz

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