Peringatan: Komponen mengubah input teks tipe yang tidak terkontrol untuk dikontrol. Elemen input tidak boleh beralih dari tidak terkontrol ke terkontrol (atau sebaliknya). Putuskan antara menggunakan elemen input yang dikontrol atau tidak dikontrol selama masa pakai komponen. *
Berikut ini adalah kode saya:
constructor(props) {
super(props);
this.state = {
fields: {},
errors: {}
}
this.onSubmit = this.onSubmit.bind(this);
}
....
onChange(field, e){
let fields = this.state.fields;
fields[field] = e.target.value;
this.setState({fields});
}
....
render() {
return(
<div className="form-group">
<input
value={this.state.fields["name"]}
onChange={this.onChange.bind(this, "name")}
className="form-control"
type="text"
refs="name"
placeholder="Name *"
/>
<span style={{color: "red"}}>{this.state.errors["name"]}</span>
</div>
)
}
javascript
reactjs
Riya Kapuria
sumber
sumber
fields
dalam keadaan?Jawaban:
Alasannya adalah, dalam status yang Anda tentukan:
bidang sebagai objek kosong, jadi selama rendering pertama
this.state.fields.name
akanundefined
, dan bidang input akan mendapatkan nilainya sebagai:Karena itu, bidang input akan menjadi tidak terkontrol.
Setelah Anda memasukkan nilai apa pun dalam input,
fields
status diubah menjadi:Dan pada saat itu bidang input akan dikonversi menjadi komponen yang dikendalikan; itu sebabnya Anda mendapatkan kesalahan:
Solusi yang memungkinkan:
1- Tetapkan status
fields
dalam sebagai:2- Atau mendefinisikan properti nilai dengan menggunakan evaluasi hubung singkat seperti ini:
sumber
''
merupakan nilai string yang valid. jadi ketika Anda mengubah''
ke 'xyz', tipe input tidak berubah berarti dikontrol menjadi terkontrol. Tapi dalam kasusundefined
untukxyz
jenis akan berubah dari tidak terkendali ke dikendalikan.value={this.state.fields.name || ''}
Mengubah
value
kedefaultValue
akan menyelesaikannya.Catatan :
Aku digunakan
value={this.state.input ||""}
dalaminput
untuk menyingkirkan peringatan itu.sumber
Di dalam komponen, masukkan kotak input dengan cara berikut.
sumber
SIMPLY, Anda harus mengatur keadaan awal terlebih dahulu
Jika Anda tidak menyetel keadaan awal, reaksi akan menganggapnya sebagai komponen yang tidak terkontrol
sumber
Selain jawaban yang diterima, jika Anda menggunakan
input
tipecheckbox
atauradio
, saya menemukan saya perlu null / undefined memeriksachecked
atribut juga.Dan jika Anda menggunakan TS (atau Babel), Anda bisa menggunakan nullish coalescing alih-alih operator logika ATAU:
sumber
Tetapkan Status Saat Ini terlebih dahulu
...this.state
Itu karena ketika Anda akan menetapkan negara baru itu mungkin tidak terdefinisi. jadi itu akan diperbaiki dengan mengatur status mengekstraksi kondisi saat ini juga
Jika ada objek di negara Anda, Anda harus menetapkan negara sebagai berikut, misalkan Anda harus mengatur nama pengguna di dalam objek pengguna.
sumber
menghasilkan kesalahan segera setelah Anda mengetik di bidang teks
akan memperbaiki masalah pada contoh string ini.
sumber
Jika Anda menggunakan beberapa input pada bidang, ikuti: Misalnya:
Cari masalah Anda di:
sumber
Menggunakan React Hooks juga jangan lupa untuk menetapkan nilai awal.
Saya menggunakan
<input type='datetime-local' value={eventStart} />
dan inisialeventStart
seperticonst [eventStart, setEventStart] = useState();
sebagai gantinya
const [eventStart, setEventStart] = useState('');
.String kosong dalam tanda kurung adalah perbedaan.
Juga, jika Anda mengatur ulang formulir setelah mengirim seperti saya lakukan, sekali lagi Anda perlu mengaturnya ke string kosong, bukan hanya untuk mengurung tanda kurung.
Ini hanyalah kontribusi kecil saya untuk topik ini, mungkin itu akan membantu seseorang.
sumber
Dalam kasus saya, itu adalah apa yang dikatakan oleh jawaban teratas Mayank Shukla. Satu-satunya detail adalah keadaan saya kurang sepenuhnya properti yang saya mendefinisikan.
Misalnya, jika Anda memiliki status ini:
Jika Anda memperluas kode Anda, Anda mungkin ingin menambahkan properti baru jadi, di tempat lain dalam kode Anda, Anda dapat membuat properti baru
c
yang nilainya tidak hanya tidak ditentukan pada keadaan komponen tetapi properti itu sendiri tidak terdefinisi.Untuk mengatasi ini, pastikan untuk menambahkan
c
ke negara Anda dan berikan nilai awal yang tepat.misalnya,
Semoga saya bisa menjelaskan kasus tepi saya.
sumber
Saya mendapatkan peringatan yang sama: Komponen mengubah input tipe yang tidak terkontrol yang disembunyikan untuk dikendalikan. Saya tidak dapat memperbaiki masalah saya. Ada ide kenapa?
saya mencoba
({ valueName, valueName: {geschlecht=""}, onChangeAllg,})
danvalue={valueName.geschlecht || ""}
sumber
defaultValue={""}
dalam TextField hilangPeringatan: Komponen mengubah input teks tipe yang tidak terkontrol untuk dikontrol. Elemen input tidak boleh beralih dari tidak terkontrol ke terkontrol (atau sebaliknya). Putuskan antara menggunakan elemen input yang dikontrol atau tidak dikontrol selama masa pakai komponen.
Solusi: Periksa apakah nilainya tidak ditentukan
Bereaksi / Formik / Bootstrap / TypeScript
contoh:
sumber