Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用ref访问map函数的子函数并更改其样式?

如何使用ref访问map函数的子函数并更改其样式?
EN

Stack Overflow用户
提问于 2022-10-30 22:07:11
回答 1查看 34关注 0票数 0

如何使用ref访问map函数的子函数并更改其样式?

这是我的联署材料:

代码语言:javascript
运行
AI代码解释
复制
<NodeStyles.Container >
  <div className="circle" id="container" ref={ref}>

  {items?.map((el, index) => (
    <Nodes
      changeCenterNode={changeCenterNode}
      setCenterNode={setCenterNode}
      setfadeIn={setfadeIn}
      key={index}
      relations={el.Relations}
      index={index}
      el={el}
      ParentUnique={el.ParentUnique}
    />
  ))}
  </div>
</NodeStyles.Container>

这是我的useEffect:

代码语言:javascript
运行
AI代码解释
复制
  useEffect(() => {
    // ️ use a ref (best)
    const items = ref.current.children;
    for (var i = 0, l = items.length; i < l; i++) {
      items[i].style.left =
        (
          54 -
          140 * Math.cos(-0.5 * Math.PI - 2 * (1 / l) * i * Math.PI)
        ).toFixed(4) + "%";

      items[i].style.top =
        (
          20 +
          140 * Math.sin(-0.5 * Math.PI - 2 * (1 / l) * i * Math.PI)
        ).toFixed(4) + "%";
    }
  }, [items, ref]);

当我使用map函数时,我不能用ref来改变孩子的风格。如何更改节点组件的样式?

在我的节点组件中,我有三个div标记

代码语言:javascript
运行
AI代码解释
复制
//Nodes Component
    ...
         return (
            <div>
              <div>1</div>
              <div>2</div>
              <div>3</div>
            </div>
          )      ;
EN

回答 1

Stack Overflow用户

发布于 2022-10-30 22:55:21

你的裁判指的是什么?据我所知,您可能只对类组件和html元素使用ref属性,因为根据文档说明。

--您可能不会对函数组件使用ref属性,因为它们没有实例。https://reactjs.org/docs/refs-and-the-dom.html

如果情况恰好是这样,为什么不直接将样式传递给孩子,如果你想把它应用到所有的孩子身上,你可以通过使用React.Children.toArray来使孩子变平,然后映射和应用你的样式,否则你必须检查它是什么类型的。

另一个选项是创建包装器组件,使用更好的克隆元素,您可以在不干扰其他道具等的情况下应用任何样式,它可以如下所示

代码语言:javascript
运行
AI代码解释
复制
const Wrapper= ({ children }) => {

  return React.cloneElement(children, {
    style: {
   'left':
    (
      54 -
      140 * Math.cos(-0.5 * Math.PI - 2 * (1 / l) * i * Math.PI)
    ).toFixed(4) + "%",
   'top':
    (
      20 +
      140 * Math.sin(-0.5 * Math.PI - 2 * (1 / l) * i * Math.PI)
    ).toFixed(4) + "%"
},
  })
};

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74259322

复制
相关文章
【分享】并行或串行运行多个NPM脚本的CLI工具
Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~ 背景介绍: 我们的node项目的脚本通通都是放在了package.json的scripts节点下面,当我们要在一个命令执行完后接着去执行下一个命令的时候(如:打包后需要推送打包内容到服务器)就需要增加一条脚本并使用&amp;&amp;进行拼接两条或多条命令来实现,并且符号&amp;在windows下的cmd.exe是不兼容的。 本期介绍的主角(npm-run-all): 今天主要想分享一个比较不错的N
前端小鑫同学
2022/12/26
1.5K0
【分享】并行或串行运行多个NPM脚本的CLI工具
npm并行&串行执行多个scripts命令
通过npm run <commander> 可以运行 package.json 中脚本,Npm 命令不能提供立即运行多个脚本的方式,同时运行需要打开多个终端窗口
奋飛
2020/05/28
6.8K0
npm并行&串行执行多个scripts命令
通过npm run 可以运行 package.json 中脚本,Npm 命令不能提供立即运行多个脚本的方式,同时运行需要打开多个终端窗口
奋飛
2021/08/30
1.6K0
Hadoop: MapReduce2多个job串行处理
复杂的MapReduce处理中,往往需要将复杂的处理过程,分解成多个简单的Job来执行,第1个Job的输出做为第2个Job的输入,相互之间有一定依赖关系。以上一篇中的求平均数为例,可以分解成三个步骤: 1. 求Sum 2. 求Count 3. 计算平均数 每1个步骤看成一个Job,其中Job3必须等待Job1、Job2完成,并将Job1、Job2的输出结果做为输入,下面的代码演示了如何将这3个Job串起来 1 package yjmyzz.mr.job.link; 2 3 import org
菩提树下的杨过
2018/01/19
6860
Spark 多个Stage执行是串行执行的么?
这里的话,我们构建了两个输入(input1,input2),input2带有一个reduceByKey,所以会产生一次Shuffle,接着进行Join,会产生第二次Shuffle(值得注意的是,join 不一定产生新的Stage,我通过强制变更join后的分区数让其发生Shuffle ,然后进行Stage的切分)。
用户2936994
2018/08/27
1.3K0
Spark 多个Stage执行是串行执行的么?
使用 Maven 运行单元测试
Gitlab 除了基本的版本管理功能之外,还提供了很有用的持续集成能力,简单的在项目根目录中编写一段 .gitlab-ci.yml,就能够让 Gitlab 按照其中的指示完成持续集成的工作。
崔秀龙
2019/07/24
1.8K0
js实现多个异步任务的串行和并行执行(add/sum)
参考代码:https://github.com/shfshanyue/Daily-Question/issues/662#issuecomment-885993395
蓓蕾心晴
2022/08/28
1.8K0
一套测试用例如何实现支持多个环境运行
一款需要正式对外发布的产品,通常都需要经历一个较完整的测试验证过程,在整个产品质量验证阶段,一般会经历几类测试环境的验证:从产品集成阶段的测试环境->验收阶段的预发布环境->正式发布回归的生产环境。
测试开发技术
2020/05/13
2.1K0
一套测试用例如何实现支持多个环境运行
使用 Swift 的并发系统并行运行多个任务
Swift 内置并发系统的好处之一是它可以更轻松地并行执行多个异步任务,这反过来又可以使我们显着加快可以分解为单独部分的操作。
Swift社区
2022/05/19
1.2K0
批量运行多个R脚本
如果把这些R代码文件一个个打开,然后一个个运行,工作量也不小,所以我们推荐一个技巧:
生信技能树
2022/07/26
1.9K0
批量运行多个R脚本
linux 下运行多个tomcat
export CATALINA_BASE CATALINA_HOME TOMCAT_HOME
流柯
2018/08/30
4.4K0
RestAssured接口系列|环境搭建
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
测试邦
2019/07/24
5350
利器 | 接口自动化测试框架 RESTAssured 实践(三)对 Response 结果导出
上一篇文章中介绍了rest-assured对返回结果的断言,最后说明了对于Response结果导出的需求。可查看往期文章进行查看。
霍格沃兹测试开发
2022/05/30
4520
如何在 Mac 上使用 pyenv 运行多个版本的 Python
即使对于有经验的开发人员,管理本地 Python 开发环境仍然是一个挑战。尽管有详细的软件包管理策略,但仍需要采取另外的步骤来确保你在需要时运行所需的 Python 版本。
用户8639654
2021/09/18
5.3K0
Scrapy:多个爬虫同时运行
在spiders目录的同级目录下创建一个commands目录,并在该目录中创建一个crawlall.py,将scrapy源代码里的commands文件夹里的crawl.py源码复制过来,只修改run()方法即可。(文件夹下面必须要有__init__文件)
新码农
2020/12/29
1.5K0
【IDEA】同一个应用运行多个测试实例(以不同端口)
一、在idea中写好应用后,正常情况下,选择测试,将启动唯一的服务实例(8080端口默认)
陶然同学
2023/04/02
1.5K0
【IDEA】同一个应用运行多个测试实例(以不同端口)
批量运行多个R脚本并打印运行状态
曾老师曾经有一篇推文《批量运行多个R脚本》,介绍了批量运行R脚本的思路,同时也提出了一些问题,今天就这个学徒作业,我们来探究一下。
小汪Waud
2023/02/20
9360
批量运行多个R脚本并打印运行状态
如何在多个 Linux 服务器上运行多个命令
如果你正在管理多台 Linux 服务器,并且你想在所有 Linux 服务器上运行多个命令,但你不知道该怎么做。不用担心,在这个简单的服务器管理指南[1]中,我们将向您展示如何在多个 Linux 服务器上同时运行多个命令。
数据科学工厂
2023/08/10
3570
如何在多个 Linux 服务器上运行多个命令
tomcat不能运行或共存多个项目
我在Tomcat下部署了两个项目,但是一个可以运行,另一个不可以,第一感觉是内存问题,给tomcat多分配了内存.但是没有作用. 原因是少了webAppRootKey这个参数,需要在各自的web.xml下添加 <context-param>        <param-name>webAppRootKey</param-name>        <param-value>socialmedia</param-value>   </context-param> 但是我添加后,只能运行一个,其他两个运行不了。原
冷冷
2018/02/08
9950
pytest运行_pytest执行多个py文件
pytest 运行完用例之后会生成一个 .pytest_cache 的缓存文件夹,用于记录用例的ids和上一次失败的用例。 方便我们在运行用例的时候加上–lf 和 –ff 参数,快速运行上一次失败的用例。 –lf, –last-failed 只重新运行上次运行失败的用例(或如果没有失败的话会全部跑) –ff, –failed-first 运行所有测试,但首先运行上次运行失败的测试(这可能会重新测试,从而导致重复的fixture setup/teardown)
全栈程序员站长
2022/09/16
2K0

相似问题

不运行Tomcat的RestAssured测试

11

使用Restassured测试后端超时

22

使用restassured测试获取503错误

10

API测试- RestAssured循环

10

使用spring-boot和restassured在teamcity中运行集成测试

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文