javascript - 第一次渲染组件后,对象变为只读

标签 javascript reactjs

当我尝试将 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>
    );
  }
}

输出:

  • {value: 12, writable: true, enumerable: true, configurable: true}
  • {value: 12, writable: false, enumerable: true, configurable: false}
  • {value: 12, writable: false, enumerable: true, configurable: false}

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

最佳答案

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

引用:

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

关于javascript - 第一次渲染组件后,对象变为只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59098114/

相关文章:

reactjs - 引用错误 : Cannot access 'steps' before initialization

reactjs - 如果 map 值发生变化,如何强制重新渲染?

reactjs - 如何正确地将 ReactJS 应用程序部署为 Azure Web 应用程序

javascript - 在 React with Jest 中测试模拟表单输入

javascript - 如何判断下拉菜单是否有可供选择的选项?

javascript - 用于选中复选框标签的 Jquery 选择器

javascript - Material-ui:如何停止在嵌套组件中传播点击事件

javascript - 将函数名称定义为动态

javascript - if 语句使我的 javascript 程序停止工作

javascript - 我们如何向古腾堡的 editor.BlockListBlock 添加自定义数据属性?