我允许'修改构造函数中的道具吗?

mpe*_*pen 11 javascript reactjs

他们说你不应该修改propsReact组件.这是否扩展到在构造函数中修改它们?

特别,

export default class BookingForm extends React.Component {

    constructor(props) {
        // am I allowed to modify `props` here?
        super(props);
    }
}
Run Code Online (Sandbox Code Playgroud)

要非常清楚,我知道JavaScript允许我这样做,我问这是一个糟糕的设计模式,将来会让我头疼.

我想在初始化时重新格式化一些道具; 之后他们不会再改变了.

mpe*_*pen 11

再次重申什么zerkms指给我看,答案是没有,你是不是可以修改props,甚至在构造函数中.

super()期望与你给出完全相同的道具,即使你试图通过提供不同的东西来欺骗系统,它们也会在构造函数之后立即被覆盖.因此,你无法修改this.props.

即使您尝试修改props对象以添加额外属性,您也会看到如下错误:

TypeError:无法添加属性培根,对象不可扩展

因此,即使您愿意,也无法修改构造函数中的props.

但是,您可以设置新的[JavaScript]属性,例如

this.myReformattedProperty = format(props.oldProperty)
Run Code Online (Sandbox Code Playgroud)

  • 如果我们在做`super(props)`之前修改道具怎么样:`props = {blah:true}; super(道具);`我的目标是`如果props.x是undefiend,默认props.x = props.y` (3认同)