1
在我嘗試處理更新表單時,已經編寫了下面的代碼。它是一個受控輸入組件,具有相應的狀態值。當輸入組件發生更改時,狀態值會更新。這意味着視圖總是會反映數據的變化,反之亦然。我試圖用數據庫中的數據預填充輸入組件時出現問題。我的嘗試是在構造函數中定義初始狀態值,以等於傳遞的道具,但這並不起作用。當組件第一次呈現時,它不會包含傳遞的靈魂道具,因爲它尚未被提取。當組件第二次呈現時(因爲數據已準備好)構造函數將不會被調用。如何在數據準備好而不是之前設置初始狀態?預先填充受控組件
SpiritsEditContainer
export default createContainer(({params}) => {
const handle = Meteor.subscribe("spirit", params.id);
return {
loading: !handle.ready(),
spirit: Spirits.find(params.id).fetch()[0]
}
}, SpiritsEditPage);
SpiritsEditPage
export default class SpiritsEditPage extends Component {
constructor(props) {
super(props)
this.state = {name: this.props.spirit.name}
}
handleNameChange(event) {
this.setState({name: event.target.value});
}
handleUpdate(event) {
event.preventDefault();
}
render() {
const {name} = this.state;
if (this.props.loading) {
return <div>loading</div>
} else {
return (
<div>
<h1>SpiritsEditPage</h1>
<form onSubmit={this.handleUpdate.bind(this)}>
<Input type="text"
label="Name"
value={name}
onChange={this.handleNameChange.bind(this)}/>
<button>Update</button>
</form>
</div>
)
}
}
}
你可以用你的問題來解釋問題的發生地點嗎?例如,預填充的表單如何改變應用程序的功能? –