【发布时间】:2019-01-25 15:38:07
【问题描述】:
这似乎是一个愚蠢的问题,所以我提前道歉。
我有一个包含多个输入的页面,目前,出于某种原因,我不能只获取输入中写入的新值,因此我可以更新状态并发送这些新数据。在我看来,onChange 函数有问题,因为我可以获得以前的状态,但不能获得我在状态上保存的新值。
编辑: 提交按钮在输入表单之外。
代码如下:
constructor(props) {
super(props)
this.state = {
editMode: false,
data: {
designation: '',
address: '',
description: ''
}
}
}
componentDidMount = () => {
const dataInfo = data.get('url here');//fetching data here
const data = {
designation: dataInfo.designation ,
address: dataInfo.address,
description: dataInfo.description
}
this.setState({
data: data
})
}
handleInput = (e) => {
let value = e.target.value;
let name = e.target.name;
this.setState(
prevState => ({
data: {
...prevState.data,
[name]: value
}
})
);
}
handleFormSubmit = (e) => {
e.preventDefault();
const { data } = this.state;
console.log('hey', data.designation);
this.setState({
editMode: false
})
}
render() {
{!this.state.editMode
? <button onClick={() => this.setState({ editMode: true })}>edit</button>
: <div>
<button
className={styles.buttonMargin}
onClick={() => this.setState({ editMode: false })}>cancel</button>
<button onClick={this.handleFormSubmit}>Guardar</button>
</div>
}
<div>
{this.state.editMode
? <form onSubmit={this.handleFormSubmit}>
<input
type='text'
placeholder='Nome do Campo'
name='designation'
onChange={this.handleInput}
defaultValue={this.state.data.designation}
/>
</form>
: <p> {this.state.data.designation} </p> }
</div>
}
}
【问题讨论】:
-
哪里没有最新的数据?在
handleInput方法还是render方法中? -
你确定
handleInput函数被命中了吗?看来您需要将此函数绑定到范围。 -
为什么 [name] 带有方括号?
-
像
function = () => {//code here}这样的函数不需要this.function = this.function.bind(this)。 @BryanOfEarth -
我做了一个
console.log(e.target.value)inside the handleInput(),我可以看到我在写什么。 @BryanOfEarth
标签: javascript reactjs