Javascript ReactJS:State在初始状态为props时不会在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函数,当我尝试在表单输入中键入时,它确实会触发onChange,但值根本没有改变

  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)
  }