Saya mencoba mengirim data dari komponen anak ke induknya sebagai berikut:
const ParentComponent = React.createClass({
getInitialState() {
return {
language: '',
};
},
handleLanguageCode: function(langValue) {
this.setState({language: langValue});
},
render() {
return (
<div className="col-sm-9" >
<SelectLanguage onSelectLanguage={this.handleLanguage}/>
</div>
);
});
dan di sini adalah komponen anak:
export const SelectLanguage = React.createClass({
getInitialState: function(){
return{
selectedCode: '',
selectedLanguage: '',
};
},
handleLangChange: function (e) {
var lang = this.state.selectedLanguage;
var code = this.state.selectedCode;
this.props.onSelectLanguage({selectedLanguage: lang});
this.props.onSelectLanguage({selectedCode: code});
},
render() {
var json = require("json!../languages.json");
var jsonArray = json.languages;
return (
<div >
<DropdownList ref='dropdown'
data={jsonArray}
value={this.state.selectedLanguage}
caseSensitive={false}
minLength={3}
filter='contains'
onChange={this.handleLangChange} />
</div>
);
}
});
Yang saya butuhkan adalah untuk mendapatkan nilai yang dipilih oleh pengguna di komponen induk. Saya mendapatkan kesalahan ini:
Uncaught TypeError: this.props.onSelectLanguage is not a function
Adakah yang bisa membantu saya menemukan masalahnya?
PS Komponen anak membuat dropdown dari file json, dan saya perlu daftar dropdown untuk menunjukkan kedua elemen array json di samping satu sama lain (seperti: "aaa, bahasa Inggris" sebagai pilihan pertama!)
{
"languages":[
[
"aaa",
"english"
],
[
"aab",
"swedish"
],
}
<SelectLanguage onSelectLanguage={this.handleLanguage*Code*}/>
salah ketik.handleLanguageCode: function(langValue) { this.setState({ language: langValue }).bind(this); },
Tetapi mengembalikan kesalahan:ncaught TypeError: Cannot read property 'bind' of undefined
createClass
autobinds metode tidak bereaksi.Jawaban:
Ini seharusnya bekerja. Saat mengirim penyangga kembali, Anda mengirimnya sebagai objek, bukan mengirimnya sebagai nilai atau menggunakannya sebagai objek dalam komponen induk. Kedua Anda perlu memformat objek json Anda untuk memuat pasangan nilai nama dan penggunaan
valueField
sertatextField
atributDropdownList
Jawaban singkat
Induk:
Anak:
Terperinci:
EDIT:
Mempertimbangkan React.createClass sudah usang dari v16.0 dan seterusnya, Lebih baik untuk terus maju dan membuat Komponen Bereaksi dengan memperluas
React.Component
. Melewati data dari komponen child ke parent dengan sintaks ini akan terlihat sepertiInduk
Anak
Menggunakan
createClass
sintaks yang digunakan OP dalam Parent jawabannyaAnak
JSON:
sumber
this.state.selectedLanguage
tampaknya selalu nol: / Saya menggunakan DropDownList darireact-widgets
Uncaught ReferenceError: value is not defined
. Saya membuat perubahan ini:onChange={this.handleLangChange.bind(this, this.value)}
dan tidak ada kesalahan yang kembali, tetapi tetap saja tidak menunjukkan nilai yang dipilih :(Untuk meneruskan data dari komponen anak ke komponen induk
Dalam Komponen Induk:
Dalam Komponen Anak:
sumber
this.getData = this.getData.bind(this);
di konstruktor, karena Anda mungkin mendapatkan this.setState bukan fungsi jika Anda ingin memanipulasi keadaan di getData.Saya menemukan pendekatan bagaimana cara mendapatkan data dari komponen anak pada orang tua ketika saya membutuhkannya.
Induk:
Anak:
Contoh ini menunjukkan cara meneruskan fungsi dari komponen anak ke orang tua dan menggunakan fungsi ini untuk mendapatkan data dari anak.
sumber
Mempertimbangkan Komponen Fungsi Bereaksi dan menggunakan Hook semakin populer akhir-akhir ini, saya akan memberikan contoh sederhana tentang cara Melewati data dari komponen anak ke orang tua
di Komponen Fungsi Induk kita akan memiliki:
kemudian
dan meneruskan setChildData (yang melakukan pekerjaan yang mirip dengan this.setState di Komponen Kelas) ke Child
di Komponen Anak pertama kita mendapatkan alat peraga penerima
maka Anda dapat meneruskan data bagaimanapun juga seperti menggunakan fungsi handler
sumber
Metode React.createClass telah usang dalam versi baru React, Anda dapat melakukannya dengan sangat sederhana dengan cara berikut membuat satu komponen fungsional dan komponen kelas lain untuk mempertahankan status:
Induk:
Anak:
sumber
dari komponen anak ke komponen induk seperti di bawah ini
komponen induk
komponen anak
Saya harap ini berhasil
sumber
dalam
React v16.8+
komponen fungsi, Anda dapat menggunakanuseState()
untuk membuat status fungsi yang memungkinkan Anda memperbarui status induk, lalu meneruskannya ke child sebagai atribut props, kemudian di dalam komponen child Anda dapat memicu fungsi status induk, berikut ini adalah cuplikan kerja :sumber
Anda bahkan dapat menghindari fungsi di induk memperbarui negara secara langsung
Dalam Komponen Induk:
Dalam Komponen Anak:
sumber
Idenya adalah mengirim panggilan balik ke anak yang akan dipanggil untuk memberikan data kembali
Contoh lengkap dan minimal menggunakan fungsi:
Aplikasi akan membuat Anak yang akan menghitung angka acak dan mengirimkannya kembali langsung ke induk, yang akan
console.log
menghasilkansumber
Komponen Induk: -TimeModal
Catatan : - onSelectPouringTimeDiff = {this.handleTimeValue}
Dalam props panggilan Komponen Anak saat diperlukan
sumber