【问题标题】:Object becomes read-only after the component rendered first time组件第一次渲染后对象变为只读
【发布时间】:2019-11-29 02:34:07
【问题描述】:

当我尝试将 React 15.X 升级到 React 16.X 时出现此问题:

let style = {
  width:12
};
class Box extends React.Component {
  constructor(props) {
    super(props);
  }
  render() {

    console.log(Object.getOwnPropertyDescriptor(style,'width'))

    style.width = 96;

    return (
      <div style={style}>

      </div>
    );
  }
}

输出:

  • {值:12,可写:true,可枚举:true,可配置:true}
  • {值:12,可写:false,可枚举:true,可配置:false}
  • {值:12,可写:false,可枚举:true,可配置:false}

有人知道为什么“可写”会变成假吗?

【问题讨论】:

  • 什么是onChange,没有定义。你为什么要直接改变一个道具?我不确定为什么它在第一次渲染后变为 false,但它可能不应该是可写的,它是一个道具。
  • props 是不可变的,如果你想在直播中更新样式,请尝试在 componentDidMount() 中使用 state
  • 我编辑了这个问题。对不起,我复制了错误的代码

标签: javascript reactjs


【解决方案1】:

因为禁止更改style 对象,并且在渲染过程中的某处调用了Object.freeze(style)

参考:

长期以来一直不鼓励 React 中的对象突变。 Object.freeze(props) 在 v0.x.x 天后强制执行。在 v16 中添加了Object.freeze(style)

【讨论】:

  • 谢谢,这就是我想要的 (๑ơ ₃ ơ)ﻌﻌﻌ♥
猜你喜欢
  • 2019-04-27
  • 1970-01-01
  • 2013-02-17
  • 2021-10-31
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多