reactjs - 反应:如何编辑表单?
问题描述
我正在使用 localStorage 来存储表单详细信息。安装组件后,我在控制台中获取数据。如何在表单中显示数据并进行编辑?我已经设置了编辑状态,但我没有得到如何实现这一点,以便预填充这些值?
这是代码:
class MileStoneForm extends Component {
constructor(props){
super(props)
this.state={
deliverable_name:"",
due_date:"",
deliverable_notes:"",
milestone_based_payment:false,
deliverable_name_error:"",
due_date_error:"",
deliverable_notes_error:"",
percent_rate:0,
percent_rate_error:"",
due_date_select:false,
edit:false,
milestonedata:null;
}
}
componentDidMount(){
let milestonedata=JSON.parse(localStorage.getItem('mileStoneData'))
console.log(milestonedata)
if(this.state.edit===true){
this.setState({
milestonedata:milestonedata
},()=>{this.setEditMileStoneData()})
}
}
setEditMileStoneData=()=>{
const {milestonedata}=this.state
let data={
deliverable_name:milestonedata.milestoneName,
deliverable_notes:milestonedata.description,
due_date:milestonedata.dueDate,
milestone_based_payment:milestonedata.isMilestoneBasedPayment,
percent_rate:milestonedata.percentageRate
}
this.setState({...data})
}
handleSubmit=()=>{
const {deliverable_name,deliverable_name_error,deliverable_notes,deliverable_notes_error,
due_date,due_date_error,milestone_based_payment,percent_rate}=this.state
let pass=true
if(pass){
let data={
description: deliverable_notes,
dueDate: due_date,
isDeleted: false,
isMilestoneBasedPayment: milestone_based_payment,
milestoneName: deliverable_name,
percentageRate: percent_rate,
}
console.log(data)
this.props.handleData(data)
localStorage.setItem('mileStoneData',JSON.stringify(data))
this.setState({
deliverable_name:'',
deliverable_name_error:'',
deliverable_notes:'',
deliverable_notes_error:'',
milestone_based_payment:false,
percent_rate:'',
due_date:'',
due_date_error:''
})
}
}
export default MileStoneForm
解决方案
您应该查看 React 文档中的“受控组件”部分。
其背后的想法是:
- 您为表单创建一个状态对象。
- 您将每个表单字段的状态添加为其值
- 您添加一个函数来
onChange
更新饱和度。
class NameForm extends React.Component {
constructor(props) {
super(props);
this.state = {value: ''};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({value: event.target.value});
}
handleSubmit(event) {
alert('A name was submitted: ' + this.state.value);
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input type="text" value={this.state.value} onChange={this.handleChange} />
</label>
<input type="submit" value="Submit" />
</form>
);
}
}
推荐阅读
- python-3.6 - 如何设置一个 cron 来专门使用 python3 运行?
- winforms - C# Winforms/WPF - 如果选中单选按钮,则更新 Winforms 文本框
- performance - Unity3D:动作捕捉动画在移动设备上的兼容性是否低很多?
- python - 根据其他数据框中提供的范围值创建新列
- python - 如何将使用“\r\n”作为换行符的字符串转换为熊猫数据框
- aws-lambda - AWS-Lambda 可以使用调用 C 的 Python 吗?
- c# - 如何在锁定屏幕下退出 UWP Kiosk 应用程序
- haskell - 如何使用 MonadReader 和 MonadIO 运行此方法?
- google-apps-script - 如何根据表单问题的字符串值有效地修改变量?
- php - 如何获取url参数