Javascript 在typescript中将React.Component状态设置为this.props值是否有问题?
我正在尝试将作为属性传递到React.Component的对象分配给状态值,如下所示: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
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()}@joelgullandercomponentWillReceiveProps
不推荐使用。您不应该使用它我的理由是该组件是一个模式输入表单-我正在传递一些文本框的初始值,这些文本框可能会/可能不会更改-当传递回更改时,我只希望合并新的更改并保留任何未更改的值。在回复你的时候,我想到了一个可能的解决方法,因为我知道道具状态是一种反模式!使用从父组件传递到内部组件的回调,在关闭模式时调用回调,将新值传递回父组件。然后更新回调中的父级