ฉันกำลังพยายามเริ่มต้นฟิลด์ควบคุมในการตอบสนอง แต่ฉันไม่ทราบค่าเริ่มต้นระหว่างการก่อสร้าง
ความเข้าใจของฉันคือแม้ว่าคุณจะทำ setState ซึ่งทำให้เกิดการเรนเดอร์ซ้ำ สิ่งนี้จะไม่เปลี่ยนค่าของการควบคุม - ฉันไม่แน่ใจว่าทำไม
ดังนั้นสิ่งต่อไปนี้จะไม่ทำงาน:
componentDidMount() {
... // code to get value
this.setState({ value: "hello world" });
return ( <input type="text" value={this.state.value} onChange={this.handleChange} />
}
ฉันพยายามแสดงผลอินพุตในการเรียกกลับ setState แทนเพื่อให้แน่ใจว่าได้ตั้งค่าไว้แล้ว:
componentDidMount() {
... // code to get value
this.setState({ value: "hello world" }, this.renderInput);
}
renderInput = () => {
this.input = ( <input type="text" value={this.state.value} onChange={this.handleChange} />
}
หมายเหตุ: แบบฟอร์มของฉันมี {this.input)
ในตัวอย่างที่สอง แบบฟอร์มของฉันแสดงผลได้อย่างสมบูรณ์แบบ และอินพุตได้รับการเตรียมใช้งานแล้ว อย่างไรก็ตาม จากนั้นฟังก์ชัน onChange จะถูกเรียก แม้ว่าจะอัปเดตสถานะอย่างถูกต้อง แต่การเปลี่ยนแปลงสถานะจะไม่ถูกรับ - ช่องอินพุตของฉันถูกหยุดนิ่ง ราวกับว่าไม่มี onChange เลย
สิ่งนี้ทำให้ฉันนิ่งงันจริงๆ และฉันอยากรู้ว่ามีวิธีในการเริ่มต้นฟิลด์ของฉันโดยไม่ถูกบังคับให้เรียกใช้ฟังก์ชันที่อาจช้าภายในการก่อสร้างหรือไม่
<input>
จากcomponentDidMount()
this.handleChange
ของคุณกำลังทำอะไรอยู่? คุณสามารถรวมฟังก์ชันrender()
ของคุณได้ไหม - person Pipe   schedule 12.04.2018componentDidMount
จะทำอะไรไม่ได้เลย - person ecraig12345   schedule 13.04.2018handleChange
อย่างแน่นอน เนื่องจากนั่นอาจเป็นสาเหตุของปัญหา - person ecraig12345   schedule 13.04.2018