当前位置: 首页 > 面试题库 >

React(JSX)中的子对父通信,无需通量

孔棋
2023-03-14
问题内容

我真的是React的新手,我想解决我认为很简单的问题。这是我构建的组件的图片。

拾色组件

我试图完成的工作似乎很琐碎,但实际上,我读过的每一篇解释做什么的文章都告诉我一些不同的东西,而没有一种解决方案有效。它可以分解为:当用户单击标签时,它会构建一个托盘并循环遍历各种颜色以构建颜色按钮。单击颜色按钮时,它需要将单击的颜色传递给其父组件,并运行一个函数来更新其颜色。我已经阅读了有关通量,事件冒泡,将“
this”绑定到属性的信息,但这些解决方案似乎都无效。对于像我这样的新手,React文档基本上是没有用的。我现在想避免复杂的事件结构(例如flux),因为我将一些简单的组件添加到了我最初没有在React中编写的现有应用程序中。

另外,PS,此代码在JSX中,对我而言比直接的JS反应有意义。在此先感谢您的帮助!

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)}

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

onClick={this.props.update}

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

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

这是一个完整的演示示例。



 类似资料:
  • 我现在的问题是,我不知道如何从子组件到父组件进行通信,因为一旦用户选择了一种语言,我想用所选的语言更新下拉列表,所以我需要填充方法handleClick来向父组件发送所选的语言并更新它,但我不知道如何做到这一点。到目前为止,我已经试过了,但没有运气 任何帮助都将不胜感激。

  • 本文向大家介绍vuejs父子组件通信的问题,包括了vuejs父子组件通信的问题的使用技巧和注意事项,需要的朋友参考一下 父子组件之间可以通过props进行通信: 组件的定义: 1.创建component类:  2.注册一个tagnme: 局部注册: 模板注意事项:  因为 Vue 就是原生的DOM,所以有些自定义标签可能不符合DOM标准,比如想在 table 中自定义一个 tr,如果直接插入 my

  • 本文向大家介绍vue中的event bus非父子组件通信解析,包括了vue中的event bus非父子组件通信解析的使用技巧和注意事项,需要的朋友参考一下 有时候非父子关系的组件也需要通信。在简单的场景下,使用一个空的Vue实例作为中央事件总线: 在更多复杂的情况下,你应该考虑使用专门的 状态管理模式.就是用到了vuex eventBus是作为兄弟关系的组件之间的通讯中介。 代码示例: 效果图如下

  • 本文向大家介绍vue子父组件通信的实现代码,包括了vue子父组件通信的实现代码的使用技巧和注意事项,需要的朋友参考一下 之前在用vue写子父组件通信的时候,老是遇到问题!!! 子组件传值给父组件:   子组件:通过emit方法给父组件传值,这里的upparent是父组件要定义的方法      模板:   在data中定义:switchStatus = true;   方法:     父组件:模板:

  • 本文向大家介绍Vue.js 父子组件通信的十种方式,包括了Vue.js 父子组件通信的十种方式的使用技巧和注意事项,需要的朋友参考一下 面试官:Vue 中父子组件通信有哪些方式? 自己先想一分钟。 无可否认,现在无论大厂还是小厂都已经用上了Vue.js 框架,简单易上手不说,教程详尽,社区活跃,第三方套件还多。真的是前端开发人员必备技能。而且在面试当中也往往会问到关于 Vue 方面的各种问题,其中

  • 本文向大家介绍vue2.0父子组件及非父子组件之间的通信方法,包括了vue2.0父子组件及非父子组件之间的通信方法的使用技巧和注意事项,需要的朋友参考一下 1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: 子组件通过props来接收数据: 方式1: 方式2 : 方式3: 这样呢,就实现了父组件向子组件传递数据. 2.子组件与父组件通信 那么,如果子组