Reactjs 当我将道具置于状态时,即使道具已更新,状态也不会更新

Reactjs 当我将道具置于状态时,即使道具已更新,状态也不会更新,reactjs,Reactjs,当父组件将名为title的道具传递给子组件并将道具置于子组件的状态时,当父组件的标题移到子组件时,道具将更新,但状态不会更新,并且保留以前的标题 道具已更新,但使用道具的状态未更新 更新父组件时,如何更新子组件的状态 constructor() { super(); this.state = { title:'' }; } <Child title={this.state.title}/>)} 不要在

当父组件将名为title的道具传递给子组件并将道具置于子组件的状态时,当父组件的标题移到子组件时,道具将更新,但状态不会更新,并且保留以前的标题

道具已更新,但使用道具的状态未更新

更新父组件时,如何更新子组件的状态

constructor() {
        super();
        this.state = {
            title:''
        };
    }

<Child title={this.state.title}/>)}

不要在多个位置存储相同的状态;同步它们将是一件痛苦的事情。相反,将标题和状态设置器函数传递给子级,例如:

<Child
  title={this.state.title}
  setTitle={title => { this.setState({ title }); }}
/>
{this.setState({title});}
/>

不要在孩子身上保留状态-只使用
标题
道具。当您需要从子级更新时,请调用
setTitle
属性。

不要在多个位置存储相同的状态;同步它们将是一件痛苦的事情。相反,将标题和状态设置器函数传递给子级,例如:

<Child
  title={this.state.title}
  setTitle={title => { this.setState({ title }); }}
/>
{this.setState({title});}
/>

不要在孩子身上保留状态-只使用
标题
道具。当您需要从子级更新时,调用
setTitle
道具。

将道具复制到状态似乎是多余和反模式的,但如果您需要这样做(出于编辑表单中的详细信息等原因),您可以使用
构造函数和更新(有条件地)将道具复制到状态当使用
componentdiddupdate
lifecycle方法更改道具值时,它将被激活:

class Child extends Component {
  constructor(props) {
    super(props);
    this.state = {
      title: this.props.title // Copy
    };
  }

  componentDidUpdate(prevProps, prevState) {
    if (this.props.title !== prevProps.title) {
      this.setState({
        title: this.props.title // Update conditionally when it is changed in props
      });
    }
  }

  render() {
    return <>{this.state.title}</>;
  }
}
类子级扩展组件{
建造师(道具){
超级(道具);
此.state={
标题:this.props.title//副本
};
}
componentDidUpdate(prevProps、prevState){
if(this.props.title!==prevProps.title){
这是我的国家({
title:this.props.title//在props中更改时有条件地更新
});
}
}
render(){
返回{this.state.title};
}
}

将道具复制到状态似乎是多余和反模式的,但如果您需要这样做(出于编辑表单中的详细信息等原因),您可以使用
构造函数和更新(有条件地)将道具复制到状态当使用
componentdiddupdate
lifecycle方法更改道具值时,它将被激活:

class Child extends Component {
  constructor(props) {
    super(props);
    this.state = {
      title: this.props.title // Copy
    };
  }

  componentDidUpdate(prevProps, prevState) {
    if (this.props.title !== prevProps.title) {
      this.setState({
        title: this.props.title // Update conditionally when it is changed in props
      });
    }
  }

  render() {
    return <>{this.state.title}</>;
  }
}
类子级扩展组件{
建造师(道具){
超级(道具);
此.state={
标题:this.props.title//副本
};
}
componentDidUpdate(prevProps、prevState){
if(this.props.title!==prevProps.title){
这是我的国家({
title:this.props.title//在props中更改时有条件地更新
});
}
}
render(){
返回{this.state.title};
}
}

构造函数是。。好。。构造,它设置初始值,它不会永久地将道具和状态绑定在一起。你在哪里更新任何东西?你想在哪里观察这个更新?请提供一个完整且可运行的示例来演示该问题。构造函数是。。好。。构造,它设置初始值,它不会永久地将道具和状态绑定在一起。你在哪里更新任何东西?你想在哪里观察这个更新?请提供一个完整且可运行的示例来演示该问题。感谢您的回答。最初我希望这样做,但我将其设置为state,因为我希望能够将其作为表单的值进行编辑。在这种情况下有什么解决方法吗?我希望能够将更改后的标题值从子组件发送到服务器端,而无需更新父组件值。如果父组件中的值已更改,我想强制子组件更改其值。谢谢您的回答。最初我希望这样做,但我将其设置为state,因为我希望能够将其作为表单的值进行编辑。在这种情况下有什么解决方法吗?我希望能够将更改后的标题值从子组件发送到服务器端,而无需更新父组件值。如果父组件中的值已更改,我希望强制子组件更改其值。