【问题标题】:Get color of target html element in React在 React 中获取目标 html 元素的颜色
【发布时间】:2016-06-02 05:01:24
【问题描述】:

尝试使用 react 获取 html 元素的颜色,以传递给我的 redux action/reducer。

JSX

<div>
   <button styleName="css_toggle" id ="css" onClick {this.handleClick}>CSS</button>
</div>

事件处理程序

handleClick(e){
  const{dispatch} = this.props;
  console.log(`e.target: ${e.target.style}`);
  dispatch(CurrView(e.target.id, e.target.style.background));
}

Console/redux 控制台为所有样式返回空值。

我正在使用 react-css-modules/css-modules,这是我能想到的唯一异常。

欢迎提出任何想法,谢谢。

编辑:我专门为这个 stackoverflow 问题创建了一个分支:https://github.com/CharlieGreenman/pixelLight/tree/stackoverflow-37583025

注意:这个应用程序的数据流是有一个静态值,它填充应用程序的其余部分是动态的。作为对建议的回应,经过深思熟虑,我决定这是构建应用程序的正确方法。

【问题讨论】:

  • className 而不是 styleName。解决问题
  • @CoryDanielson 我正在使用 react-css-modules,它使用 styleName,意在包含 webpackbin,如果我的问题太令人困惑,可能仍然存在。谢谢。
  • 很有趣,感谢您的澄清

标签: javascript css reactjs redux css-modules


【解决方案1】:

最后我用了

const backgroundStyle = window.getComputedStyle(e.target, null).getPropertyValue("background-color");

这让我得到了正确的价值。我认为这是由于在这个应用程序中发生了两件事。

  1. 样式标签被直接注入到 html 中。如果它是 webpack-dev-server 或 react-css-modules 的结果,则不是 100%。
  2. 样式仅在 React 应用初始化后应用,并应用适当的设置。

因此,在这种情况下,获取计算样式对我来说就是这样做的。我仍在研究特定的细节。谢谢你。

【讨论】:

    【解决方案2】:

    您可以使用 refs 可靠地引用元素。

    JSX

    <div>
        <button id ="css"
            styleName="css_toggle"
            onClick={this.handleClick}
            ref={(e) => { this.cssToggleButton = e; }}>
            CSS
        </button>
    </div>
    

    事件处理程序

    handleClick() {
        const id = this.cssToggleButton.id;
        const background = this.cssToggleButton.style.background;
        this.props.dispatch(id, background);
    }
    

    【讨论】:

    • 没有骰子。不幸的是,它仍然显示为空样式。我将使用 webpackbin 或类似的东西更新我的问题。
    • 它是否正确返回了id?也许你需要style.backgroundColor 而不是style.background。您绝对应该为此使用 refs。
    • id 为 target 和 refs 返回。但是,不会为 target 或 refs 返回 style.backgroundColor 或 style.background。
    • 你是如何更新这个元素的背景颜色的?您要添加新的班级名称吗?
    • 此外,这种方法似乎天生就很脆弱,因为它取决于 CSS 的具体情况。让任何更新这个元素的样式的东西也用这个新颜色更新组件的状态会更可靠。检查 DOM 中的数据是倒退到反应方法,更新数据和重新渲染 DOM ......但我不确定这是否可能,因为我对代码了解不多。
    猜你喜欢
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 2016-08-10
    • 2018-09-19
    相关资源
    最近更新 更多