React Hooks:无法分配给只读属性

2024-05-02

我正在尝试更新使用 React.createElement() 创建的对象。我试图更新的属性是particleCopy.props.style.top。下面是我的代码。

import React, { useState } from 'react';
import './Particles.scss';

export default function Particles() {
  const particleStyle = { color: 'blue', position: 'absolute', top: '0px' };
  const [particle, setParticle] = useState(
    React.createElement('div', { style: particleStyle }, '*')
  );

  const moveParticleDown = (particle, top) => {
    const particleCopy = Object.assign({}, particle);
    particleCopy.props.style.top = top + 'px';
    setParticle(particleCopy);
  };

  return (
    <div className="particles_container">
      <div className="particles">{particle}</div>
      <div className="controls">
        <button onClick={() => moveParticleDown(particle, 10)}>down</button>
      </div>
    </div>
  );
}

我收到以下错误

Uncaught TypeError: Cannot assign to read only property 'top' of object '#<Object>'


Your particleCopy函数只是创建一个浅表副本particle,这意味着你正在尝试改变对象particle正在指向。你可以研究一个深度克隆库,或者,现在在 React 中似乎更惯用的方法是,将对象向下传播到你需要的范围内:

const particleCopy = {
  ...particle,
  props: {
    ...particle.props,
    style: {
      ...particle.props.style,
      top: top + 'px'
    }
  }
}
setParticle(particleCopy);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React Hooks:无法分配给只读属性 的相关文章

随机推荐

  • vue-router 仅更改命名视图之一,而不影响其他视图

    我正在使用 vue router 进行测试并遇到这个问题 如果我有两个命名视图但我只想更改其中一个而不更改默认视图怎么办 目前我是这样做的 const router new VueRouter routes path components
  • Android 11 - 访问我的应用程序 Android/Data 文件夹中的文件

    由于某种原因 我真的很挣扎 希望有人能帮助我指明正确的方向 我的目标是 Android 11 API 30 这似乎是所有问题的根源 降低目标可能对我有用 但谷歌似乎最终会迫使我走上这条路 所以我不妨弄清楚这一点 我的应用程序通常会按照标准写
  • 在 C++11 中处理毫秒的正确方法是什么

    我正在尝试将项目的基本开发库从 C 98 更新到 C 11 dev库中 有很多关于时间的函数 比如 uint64 t getCurrentMSTime struct timeval stv gettimeofday stv NULL uin
  • 检查状态栏是否隐藏或可见

    我想检查状态栏的状况 我如何检查状态栏是否可见 请任何人指导我做到这一点 谢谢你们 检查状态栏是否隐藏 目标C if UIApplication sharedApplication isStatusBarHidden do stuff he
  • 使用 Azure AD OAuth 身份验证从 Azure 计划程序调用 API 应用程序时“未经授权”

    我有一个 API 应用程序 已通过 Azure Active Directory 身份验证对其进行保护 我想使用 Azure Scheduler 调用此 API 应用程序的操作 我在 Scheduler 操作中输入了租户 ID 客户端 ID
  • Task.Run 如何受 CPU 内核限制?

    为什么下面的程序只会运行有限数量的阻塞任 务 限制数量似乎是机器上的核心数量 最初 当我写这篇文章时 我希望看到以下内容 作业 1 24 的作业完成输出 2秒的间隙 工作产出 25 48 然而输出是 作业 1 4 的作业完成输出 然后每隔
  • 如何使用 $filter('filter') 按对象数组中的特定字段进行过滤

    我想使用 filter filter 过滤员工对象数组 以仅根据可以从下拉列表 选择中选择的员工的名字字段来过滤结果 请注意 我不想在 ng repeat 中使用 filter 困难在于名称字段是另一个名为 details 的字段的属性 因
  • 逻辑应用程序中的图形分页

    我尝试通过 HTTP 连接器 注册的应用程序和 Microsoft Graph 获取特定组中的所有用户 注册的应用程序具有 Directory Read All 权限 我的想法是我打电话给nextLink只要它存在 同时附加所有获取的用户的
  • AMQP 消息的版本控制

    是否有关于在 AMQP 中使用版本化消息的既定最佳实践 假设我正在对消息模式进行语义版本控制 我希望支持消息的当前主要版本以及以前的主要版本 这是一个现实的期望吗 处理版本化消息的不同选项有何优缺点 我已经看到版本化路由密钥和版本消息头作为
  • 反应式:尝试了解Subject如何工作

    试图了解如何Subject
  • 我将与 ng-include 一起使用什么文件路径?

    我的角度项目的路径是这样的 web server py flask server program app static app js controllers js etc templates index html home html 索引
  • Android asmack:stateChange 从未被调用

    我正在使用 asmack xmpp 客户端构建一个聊天应用程序 聊天工作正常 我已经实施了ChatStateListener but stateChanged方法永远不会被调用 目前 为了获取撰写状态 我正在解析消息 xml 以下是撰写 文
  • 不支持“数据源”关键字。 (ASP.Net 应用程序、实体框架 5、代码优先、迁移)

    我有一个 OData WCF 数据服务端点 ASP Net 站点 我想从使用以 SQL Server 2012 作为后端的 EF Code First 数据模型切换到以 LocalDB 作为后端的 EF Code First 数据模型 在我
  • 在 Matlab 2014b 中移动等高线图的 z 值

    我正在尝试绘制曲面图 在曲面下方我希望显示轮廓线 但我希望轮廓位于z 1而不是默认值0 我找到了之前关于这个问题的帖子here https stackoverflow com questions 8054966 matlab how to
  • C# - 如何在变量名中使用无效字符

    在 C 中 我正在构建一个类 出于讨论目的而在此处进行了简化 该类最终将被序列化为一些外部定义的 JSON schema http example com person json name John age 86 在我的代码中我会有类似的内
  • 有没有更快的方法将数字转换为名称?

    以下代码定义了映射到数字的名称序列 它的设计目的是获取一个号码并检索一个特定的名称 该类通过确保名称存在于其缓存中来进行操作 然后通过索引到其缓存中来返回名称 问题在这 如何在不存储缓存的情况下根据数字计算出名称 该名称可以被认为是一个以
  • NHibernate 表更新事件

    我有这个表映射 我认为细节并不重要 WithTable COPACKER FACILITY Id x gt x FacilityNumber FACILITY NUM GeneratedBy Sequence FACSEQ Map x gt
  • 如何从 .Net Core MVC 中的 OpenIdConnect 令牌响应中提取状态参数

    我们使用 Azure b2c 来处理 net core MVC 站点上的登录 我们想使用可选的state参数来保存对站点的初始请求之间的某些数据 值 该值可能位于查询字符串参数中 然后将其发送到 b2c 进行登录 并成功登录返回到站点 Op
  • 在c#中初始化多维数组(与其他数组)

    在 C 中 可以使用常量初始化多维数组 如下所示 Object twodArray new Object 00 01 02 10 11 12 20 21 22 我个人认为用硬编码常量初始化数组对于测试练习之外的任何事情都是毫无用处的 无论如
  • React Hooks:无法分配给只读属性

    我正在尝试更新使用 React createElement 创建的对象 我试图更新的属性是particleCopy props style top 下面是我的代码 import React useState from react impor