cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menghantar data dari komponen anak ke komponen induk dalam ReactJS?

<p>Saya cuba menghantar data daripada komponen anak kepada komponen induknya seperti ini: </p> <pre class="brush:php;toolbar:false;">const ParentComponent = React.createClass({ getInitialState() { kembali { bahasa: '', }; }, handleLanguageCode: function(langValue) { this.setState({bahasa: langValue}); }, render() { kembali ( <div className="col-sm-9" > <SelectLanguage onSelectLanguage={this.handleLanguage}/> </div> ); });</pre> <p>Ini ialah subkomponen: </p> <pre class="brush:php;toolbar:false;">export const SelectLanguage = React.createClass({ getInitialState: function(){ kembali{ Kod terpilih: '', Bahasa yang dipilih: '', }; }, handleLangChange: fungsi (e) { var lang = this.state.selectedLanguage; var code = this.state.selectedCode; this.props.onSelectLanguage({selectedLanguage: lang}); this.props.onSelectLanguage({selectedCode: code}); }, render() { var json = memerlukan("json!../languages.json"); var jsonArray = json.languages; kembali ( <div> <DropdownList ref='dropdown' data={jsonArray} value={this.state.selectedLanguage} caseSensitive={false} minLength={3} penapis = 'mengandungi' onChange={this.handleLangChange} /> </div> ); } });</pre> <p>Apa yang saya perlukan ialah mendapatkan nilai yang dipilih pengguna dalam komponen induk. Saya mendapat ralat ini: </p> <pre class="brush:php;toolbar:false;">Uncaught TypeError: this.props.onSelectLanguage bukan fungsi</pre> <p>Bolehkah sesiapa membantu saya memikirkan masalahnya? </p> <p>P.S. subkomponen sedang mencipta lungsur turun daripada fail json, saya memerlukan lungsur turun untuk memaparkan dua elemen tatasusunan json bersebelahan antara satu sama lain (cth: "aaa,english" sebagai pilihan!)</p> <pre class="brush:php;toolbar:false;">{ "bahasa":[ [ "aaa", "bahasa Inggeris" ], [ "aab", "sweden" ], }</pre> <p><br /></p>
P粉441076405P粉441076405464 hari yang lalu453

membalas semua(2)saya akan balas

  • P粉652495194

    P粉6524951942023-08-28 09:50:36

    Hantar data daripada komponen anak kepada komponen induk

    Dalam komponen induk:

    getData(val){
        // do not forget to bind getData in constructor
        console.log(val);
    }
    render(){
     return(<Child sendData={this.getData}/>);
    }

    Dalam komponen kanak-kanak:

    demoMethod(){
       this.props.sendData(value);
     }

    balas
    0
  • P粉946437474

    P粉9464374742023-08-28 00:20:33

    Ini sepatutnya berkesan. Apabila menghantar kembali prop, anda menghantarnya sebagai objek dan bukannya menghantarnya sebagai nilai atau menggunakannya sebagai objek dalam komponen induk. Kedua, anda perlu memformat objek json untuk mengandungi pasangan nilai nama dan menggunakan atribut DropdownList

    valueFieldtextField

    Jawapan ringkas

    Ibu bapa:

    <div className="col-sm-9">
         <SelectLanguage onSelectLanguage={this.handleLanguage} /> 
    </div>

    Kanak-kanak:

    handleLangChange = () => {
        var lang = this.dropdown.value;
        this.props.onSelectLanguage(lang);            
    }

    Butiran:

    Editor:

    Memandangkan React.createClass telah ditamatkan pada v16.0, adalah lebih baik untuk mencipta komponen React dengan melanjutkan React.Component . Menghantar data daripada komponen anak kepada komponen induk menggunakan sintaks ini akan kelihatan seperti ini

    Ibu bapa

    class ParentComponent extends React.Component {
    
        state = { language: '' }
    
        handleLanguage = (langValue) => {
            this.setState({language: langValue});
        }
    
        render() {
             return (
                    <div className="col-sm-9">
                        <SelectLanguage onSelectLanguage={this.handleLanguage} /> 
                    </div>
            )
         }
    }

    Kanak-kanak

    var json = require("json!../languages.json");
    var jsonArray = json.languages;
    
    export class SelectLanguage extends React.Component {
        state = {
                selectedCode: '',
                selectedLanguage: jsonArray[0],
            }
    
        handleLangChange = () => {
            var lang = this.dropdown.value;
            this.props.onSelectLanguage(lang);            
        }
    
        render() {
            return (
                <div>
                    <DropdownList ref={(ref) => this.dropdown = ref}
                        data={jsonArray} 
                        valueField='lang' textField='lang'
                        caseSensitive={false} 
                        minLength={3}
                        filter='contains'
                        onChange={this.handleLangChange} />
                </div>            
            );
        }
    }

    Gunakan sintaks createClass yang OP gunakan dalam jawapannya Ibu bapa

    const ParentComponent = React.createClass({
        getInitialState() {
            return {
                language: '',
            };
        },
    
        handleLanguage: function(langValue) {
            this.setState({language: langValue});
        },
    
        render() {
             return (
                    <div className="col-sm-9">
                        <SelectLanguage onSelectLanguage={this.handleLanguage} /> 
                    </div>
            );
    });

    Kanak-kanak

    var json = require("json!../languages.json");
    var jsonArray = json.languages;
    
    export const SelectLanguage = React.createClass({
        getInitialState: function() {
            return {
                selectedCode: '',
                selectedLanguage: jsonArray[0],
            };
        },
    
        handleLangChange: function () {
            var lang = this.refs.dropdown.value;
            this.props.onSelectLanguage(lang);            
        },
    
        render() {
    
            return (
                <div>
                    <DropdownList ref='dropdown'
                        data={jsonArray} 
                        valueField='lang' textField='lang'
                        caseSensitive={false} 
                        minLength={3}
                        filter='contains'
                        onChange={this.handleLangChange} />
                </div>            
            );
        }
    });

    JSON:

    { 
    "languages":[ 
    
        { 
        "code": "aaa", 
        "lang": "english" 
        }, 
        { 
        "code": "aab", 
        "lang": "Swedish" 
        }, 
      ] 
    }

    balas
    0
  • Batalbalas