gpt4 book ai didi

javascript - 无法使用 defaultValue 设置 React 状态

转载 作者:行者123 更新时间:2023-11-29 17:51:54 24 4
gpt4 key购买 nike

我正在尝试使用户配置文件在我的组件中可编辑。现在,当用户单击“编辑”时,配置文件将替换为一个表单,该表单具有他们输入的默认值。但是,如果他们只更新一个字段,则其他字段将被重写为空值,而不是将默认值传递给状态。

有没有办法将默认值传递给状态?我也尝试过 value={} 但值根本没有改变。

我试图避免为每个输入设置一个“编辑”按钮。

class AccountEditor extends Component {
constructor() {
super()
this.state = {
isEditing: false,
profile: {
firstName: '',
lastName: '',
city: '',
email: '',
bio: '',
}
}
}

toggleEdit(event) {
event.preventDefault()
this.setState({
isEditing: !this.state.isEditing
})
}

updateProfile(event) {
let updatedProfile = Object.assign({}, this.state.profile)
updatedProfile[event.target.id] = event.target.value

this.setState({
profile: updatedProfile
}
}

submitUpdate(event) {
event.preventDefault()
this.props.onUpdate(this.state.profile)
this.setState({
isEditing: !this.state.isEditing
})
}

render() {
let profile = this.props.profile
let content = null

if (this.state.isEditing == true) {
content = (
<div>
<input
id="firstName"
onChange={this.updateProfile.bind(this)}
defaultValue={profile.firstName} />
<br />
<input
id="lastName"
onChange={this.updateProfile.bind(this)}
defaultValue={profile.lastName} />
<br />
<input
id="city"
onChange={this.updateProfile.bind(this)}
defaultValue={profile.city} />
<br />
<input
id="email"
onChange={this.updateProfile.bind(this)}
defaultValue={profile.email} />
<br />
<textarea
id="bio"
onChange={this.updateProfile.bind(this)}
defaultValue={profile.bio} />
<br />
<button onClick={this.submitUpdate.bind(this)}>Done</button>
</div>
)
} else {
content = (
<div>
<h4>Name: </h4>
<span>{profile.firstName}</span>
<span>{profile.lastName}</span><br/>
<h4>City: </h4>
<span>{profile.city}</span><br/>
<h4>Bio :</h4>
<p>{profile.bio}</p><br />
<button onClick={this.toggleEdit.bind(this)}>Edit</button>
</div>
)
}

return (
<div>
{content}
</div>
)
}
}

export default AccountEditor

最佳答案

您应该将 defaultValue 替换为 value = { this.state.someProp }。所以你的代码的一个例子是

constructor(props) {
super(props)
this.state = {
isEditing: false,
profile: props.profile // Setting up the initial data from the passed prop
}
}

<input id="firstName"
onChange={ this.updateProfile.bind(this) }
value={ this.state.profile.firstName } />

更多关于在 these docs 中对表单元素使用 React 的信息.

关于javascript - 无法使用 defaultValue 设置 React 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42750980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com