Javascript 在typescript中将React.Component状态设置为this.props值是否有问题?

Javascript 在typescript中将React.Component状态设置为this.props值是否有问题?,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我正在尝试将作为属性传递到React.Component的对象分配给状态值,如下所示: state = { rota: this.props.rota } render() { // const { cleaning, chairs, creche, flowers } = this.state.rota; const { cleaning, chairs, creche, flowers } = this.props.rota; console.log(cr

我正在尝试将作为属性传递到React.Component的对象分配给状态值,如下所示:

state = {
    rota: this.props.rota
}

render() {
    // const { cleaning, chairs, creche, flowers } = this.state.rota;
    const { cleaning, chairs, creche, flowers } = this.props.rota;

    console.log(creche);
}
获取状态值的注释掉部分打印出一个空字符串,但是属性值是正确的。当我将props.rota分配给state.rota时,我是否做错了什么

我使用的是typescript,并且在程序的另一个地方完全做到了这一点——但是传入的属性是值类型(字符串),而不是对象类型


谢谢

这通常是一种不好的做法

拿你的案子来说

从父组件获取一个值作为道具

每次父组件中的此值更改时,内部组件都将重新渲染

如果您使用类似于您的方法,您最有可能会做的是在内部组件内更改该值(通过状态),其更改不会反映在父组件上

实际上,您正在打破单向数据流的设计模式,react非常依赖这种模式

因此,我个人的意见是在这种情况下提升国家地位,避免这种情况。如果要将更改传达给父级,或者使用一些状态管理(上下文、redux等),请使用回调


或者使用HOC或render props组件设计更好的解决方案。

即使@quirimo已经回答了您的问题,如果您想在将来某个时候这样做,最简单的方法是使用构造函数并将props作为参数传入,然后将其设置为状态的默认值

class SomeComponent extends Component {
    constructor(props){
        super(props);
        this.state = {
             rota: props.rota,
        }
    }
}

这可以确保道具在您想要设置初始状态时实际可用,因为构造函数是组件生命周期中调用的第一个函数。

您在哪里设置该状态?如果它在构造函数中,那么在那一点上道具没有初始化,所以这可能是您的问题。尝试使用
getDerivedStateFromProps
,它实际上是为这种情况设计的(),如果您将这些道具传递给组件,为什么要这样做?如果您想要道具的快照,可以使用componentDidUpdate(prev,next){this.setState()}@joelgullander
componentWillReceiveProps
不推荐使用。您不应该使用它我的理由是该组件是一个模式输入表单-我正在传递一些文本框的初始值,这些文本框可能会/可能不会更改-当传递回更改时,我只希望合并新的更改并保留任何未更改的值。在回复你的时候,我想到了一个可能的解决方法,因为我知道道具状态是一种反模式!使用从父组件传递到内部组件的回调,在关闭模式时调用回调,将新值传递回父组件。然后更新回调中的父级