React (JSX) 中的子级与父级通信无需流量

2023-11-27

我对 React 还很陌生,我正在绞尽脑汁地试图解决一个在我看来很简单的问题。这是我构建的组件的图片。

颜色选择组件

我想要完成的事情似乎微不足道,但实际上我读过的每一篇解释要做什么的文章都告诉我一些不同的东西,而且没有一个解决方案有效。它分解为:当用户单击标签时,它会构建一个托盘并循环遍历一系列颜色以构建颜色按钮。单击颜色按钮时,它需要将单击的颜色传递给其父组件并运行函数来更新其颜色。我读过有关通量、事件冒泡、将“this”绑定到属性的内容,但这些解决方案似乎都不起作用。 React 文档对于像我这样的新手来说基本上没什么用。我现在想避免像 Flux 这样复杂的事件结构,因为我将一些简单的组件附加到我最初没有在 React 中编写的现有应用程序。

另外,PS,这段代码是在 JSX 中,这对我来说比直接的 JS React 更有意义。在此先感谢您的帮助!

var colorsArray = ["#ED5851", "#9CCC64", "#337AEC", "#ff7a45", "#7E58C2", "#FFEB3B", "#78909C", "#FFFFFF", "#213a4b"];

var EditDrawer = React.createClass({
    updateColor: function() {
        console.log("New Color: " + i);
    },
    render: function(){
        var passTarget = this;
        return (
            <div className="container-fluid animated fadeIn extra-fast-animation tag-edit-drawer">
                <div className="row">
                    <div className="col-xs-12">
                        {colorsArray.map(function(object, i){
                            return <ColorButton buttonColor={object} key={i} />;
                        })}
                    </div>
                </div>
            </div>
        );
    }
})

var ColorButton = React.createClass({
    render: function(){
        var buttonStyle = {
            backgroundColor: this.props.buttonColor,
        };
        return (
            <div className="tag-edit-color-button" style={buttonStyle} >
            </div>
        )
    }
})

回调函数应该可以工作。正如您在之前的评论中提到的,您可以使用捕获的this访问updateColor子函数:

var passTarget = this;
...
...
return <ColorButton 
  buttonColor={object} 
  key={i} 
  update={passTarget.updateColor} />

或者正如 Bogdan 提到的,您可以在回调函数之后通过 map 传递它:

{colorsArray.map(function(object, i){
  return <ColorButton 
           buttonColor={object} 
           key={i} 
           update={this.updateColor} />;
}, this)}

Your <ColorButton />然后组件应该能够运行一个简单的 onClick 函数:

onClick={this.props.update}

然后您可以简单地利用父组件中的普通事件目标来捕获单击的按钮的颜色:

updateColor: function(e) {
  console.log(e.target.style.backgroundColor);
}

这里有一个完整的DEMO展示。

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

React (JSX) 中的子级与父级通信无需流量 的相关文章

随机推荐

  • Look-ahead 和 Look-behind 概念如何支持 Ruby 正则表达式中的零宽度断言概念?

    我刚刚经历过这个概念Zero Width Assertions从文档中 我的脑海中浮现出一些简单的问题 为什么这样的名字Zero Width Assertions How the Look ahead and look behind概念支持
  • 创建视图时出现 SQL 错误:ORA-00957:重复的列名

    我正在尝试创建视图 但收到重复的列名称错误 如果我单独运行选择查询 那么查询将返回如下结果 SELECT distinct app APP REF NO app APP STATUS app APP DT app ATTEND STAFF
  • NoUniqueBeanDefinitionException:未定义类型 [javax.persistence.EntityManagerFactory] ​​的合格 bean:预期单个匹配 bean

    我有 2 个独立的数据库 我正在尝试在存储库中访问它们 不幸的是我收到以下异常 我尝试过的事情 曾尝试制作作为 Primary 的 Bean 之一 用过的持久化上下文正如下面的代码所示 我的异常跟踪 Exception in thread
  • 在 MS Access 2007 中创建视图

    我在 Ms Access 2007 中有一个数据库 里面有 5 个表 我想在 MS Access 中创建视图 我不需要语法 但我需要创建视图的步骤 因为我在 MS Access 中找不到创建视图 您无法在 MS Access 2007 中创
  • Recyclerview 在nestedscrollview中无限滚动,触发onScrolled

    我在nestedscrollview中有recyclerview
  • 使用递归 process.nexttick 是否可以让其他进程或线程工作?

    从技术上讲 当我们执行以下代码 recursive process nexttick 时 CPU 使用率将达到 100 或接近 100 问题是想象一下 我正在一台具有一个 CPU 的机器上运行 并且节点 HTTP 服务器的另一个进程正在工作
  • IIS 7 服务器中的日期时间格式问题

    我在 IIS 7 WS2008 上托管了我的网站之一 后来我意识到存在一些日期时间格式问题 就像我期待 dd MM yyyy 格式的内容 但它是 MM dd yyyy 格式 因此它曾经给我日期时间转换错误 所以我通过以下步骤更改了日期时间格
  • 使用 cryptojs 进行 Java 到 JS 和 JS 到 Java 加密

    几周前我收到了这篇文章并且工作得很好 适用于 Java 和 Javascript 的兼容 AES 算法 现在 我需要执行相反的操作 但是一旦进入java 我就会得到这个异常 javax crypto BadPaddingException
  • 暂停时快速高斯模糊[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 In cocos2d x我需要实现快速高斯模糊 它应该是这样的 我刚刚在 App Store 上发现了一些游戏 已经统一完成了这样的模糊 所以 这很好fadeIn fadeOut当用户暂停
  • 模仿窗口。 Opera 中使用 JavaScript 的 onerror

    我目前正在开发一个Web应用程序 我有一个JS日志记录机制 可以处理页面内的js代码未捕获的Javascript错误 我正在使用 window onerror 来捕获所有此类错误并将其记录在其他位置 然而 问题在于 Opera 没有 win
  • 如何将 Swift 代码导入 Objective-C?

    我用 Swift 编写了一个库 但无法将其导入到我当前用 Objective C 编写的项目中 有什么方法可以导入吗 import SCLAlertView swift SCLAlertView swift file not found 你
  • JavaScript - 同步等待异步操作(睡眠)

    我知道这里被问过很多次 也被回答过很多次 这不是应该如何完成的方法 但再一次 是否有可能以某种方式调用异步函数 例如计时器 ajax 调用 基本上是常见的异步任务 并同步等待它结束 而不会出现 100 CPU 使用率和阻塞浏览器的情况 简单
  • Gradle - Groovy 和 Java 类依赖 - 编译

    我的项目有 Java N 个文件 和 Groovy 代码 仅 1 个文件 Java 编译依赖于这个单个 Groovy 文件的类文件来进行 Java 编译 compileJava 任务成功 当我不使用 src java 作为 main gt
  • 中的换行符

    有没有办法在消息中换行
  • Python 中的 Hopcroft–Karp 算法

    我正在努力实施霍普克罗夫特卡普算法在Python中使用networkx作为图形表示 目前我到目前为止 Algorithms for bipartite graphs import networkx as nx import collecti
  • 每个 JavaScript 程序员应该知道什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Locked 这个问题及其
  • phpexcel下载

    你好 我是 phpexcel 的新手 我想知道是否有某种方法将我创建的 Excel 发送给客户端下载而不将其保存在我的服务器上或在他下载后立即将其删除 我正在尝试在页面上创建一个 导出按钮 该按钮将为用户提供一个 弹出窗口 其中包含他想要我
  • 如何在 SublimeText 中使用自定义字体

    我知道用户可以通过以下方式更改首选项中的 font face font face gohufont 11 font size 11 但是 每次我尝试添加 已安装的 非系统字体 例如Gohufont上面 它不起作用 安装TTF尽管有特定于平台
  • 如何从 qmake 获取 Makefile

    给定一个 x pro 文件 我如何生成 makefile 运行 qmake x pro 会生成一个没有 Makefile 的 x pbproj 目录 Thanks 编辑 添加信息 关于 pro 文件和平台 我在 Mac OS X 10 6
  • React (JSX) 中的子级与父级通信无需流量

    我对 React 还很陌生 我正在绞尽脑汁地试图解决一个在我看来很简单的问题 这是我构建的组件的图片 颜色选择组件 我想要完成的事情似乎微不足道 但实际上我读过的每一篇解释要做什么的文章都告诉我一些不同的东西 而且没有一个解决方案有效 它分