Javascript ReactJS:State在初始状态为props时不会在onChange时更新
我有一个表单输入,我将我的值设置为初始状态,该状态来自我的道具。现在我有了一个handleChange函数,当我尝试在表单输入中键入时,它确实会触发onChange,但值根本没有改变Javascript ReactJS:State在初始状态为props时不会在onChange时更新,javascript,reactjs,Javascript,Reactjs,我有一个表单输入,我将我的值设置为初始状态,该状态来自我的道具。现在我有了一个handleChange函数,当我尝试在表单输入中键入时,它确实会触发onChange,但值根本没有改变 handleChange(e){ this.setState({ [e.target.name]: e.target.value, }); console.log('handle change', this.state.firstName) } console.log返
handleChange(e){
this.setState({
[e.target.name]: e.target.value,
});
console.log('handle change', this.state.firstName)
}
console.log
返回初始状态,即使我在键盘上键入,它仍然返回初始状态。
这是我的handleChange()
虽然这是我的初始状态:
this.state = {
firstName: this.props.profiles.selectedProfile.first_name
}
这是我的意见
<Form.Input
label="First Name"
value={this.state.firstName}
placeholder="Jose"
onChange={this.handleChange}
/>
当我的状态中只声明了一个空字符串,但现在我的初始状态来自我的道具时,它就不起作用了 因为道具是开着的
如果将一个道具赋给一个状态,该状态也将是不可变的,因为该状态的值是不可变的值
为了更好地理解,我将模拟它:
var a = 0;
var b;
a = b;
// it means b = a too
如果更改b
,a
也将更改
因此,您指定的状态值是不可变值,该状态将变为不可变。
我希望它能帮助你理解它。
有关更多信息:我认为您应该使用this.setState在componentDidMount中设置状态
componentDidMount(){
this.setState({firstName : this.props.profiles.selectedProfile.first_name});
}
您说的是
[e.target.name]:e.target.value
,或name=value
,但您没有发送name字段
这段代码应该可以解决这个问题
<Form.Input
label="First Name"
name='firstName'
value={this.state.firstName}
placeholder="Jose"
onChange={this.handleChange}
/>
console.log('handle change',this.state.firstName)
不会为您提供最新的状态值,因为setState是异步的,如果您想获取最新的状态值,请使用setState的回调。您介意将e.target.name
记录在handleChange
函数中吗。另外,您是否在构造函数中绑定此handleChange
?还可以尝试:firstName:this.props.profiles.selectedProfile.first_name | |'
是的,我忘记了名字!!!但我确实在构造函数中绑定了它。非常感谢。
constructor(props) {
super(props)
this.handleChange = this.handleChange.bind(this)
}