React/Redux:悬停一个组件时,更改所有组件的颜色

Posted

技术标签:

【中文标题】React/Redux:悬停一个组件时,更改所有组件的颜色【英文标题】:React/Redux: On Hover of one Component, change color of all Components 【发布时间】:2018-12-28 11:18:07 【问题描述】:

<Word /> 成为一个简单的函数式组件(没有状态),它需要一些道具并显示一个单词。

<Word group=1 />
<Word group=2 />
<Word group=2 />
<Word group=1 />
<Word group=2 /> //There might be many more groups etc.

悬停其中一个&lt;Words /&gt; 时,我想突出显示(将背景颜色更改为黄色或其他)所有同一组中的单词。不只是悬停的词,而是那个词+同一组中的所有词。

我本来想用纯 CSS 来做这个,但这显然是不可能的。我怎么能以最小的方式用 React 做这样的事情?

【问题讨论】:

您可以在有效负载中使用“groupId”调度操作“HOVER_GROUP”。然后,每个 Word 检查它是否与其组匹配并将其背景颜色更改为黄色 【参考方案1】:
import React,  Component  from 'react';
import './App.css';

class App extends Component 

  constructor(props)
    super(props);
        this.state = 
        currentSelectedGroup: 0,
        value: 0
        ;
    this.hoverOff = this.hoverOff.bind(this);
    this.hoverOn = this.hoverOn.bind(this);
    

    hoverOn(selectedGroup)
    this.setState(
      currentSelectedGroup: selectedGroup
    );
    

    hoverOff()
    this.setState( currentSelectedGroup: 0 );
    

    render()
    return(
    <div>
         <Word group=2
      currentSelectedGroup=this.state.currentSelectedGroup
      onMouseEnter= ( ) => this.hoverOn(2) 
      onMouseLeave = this.hoverOff />
   <Word group=1
      currentSelectedGroup=this.state.currentSelectedGroup
      onMouseEnter= ( ) => this.hoverOn(1) 
      onMouseLeave = this.hoverOff
       />
        <Word group=1
      currentSelectedGroup=this.state.currentSelectedGroup
      onMouseEnter= ( ) => this.hoverOn(1) 
      onMouseLeave = this.hoverOff
       />

    <Word group=2
      currentSelectedGroup=this.state.currentSelectedGroup
      onMouseEnter= ( ) => this.hoverOn(2) 
      onMouseLeave = this.hoverOff />
      </div>
      )
    


const Word = (props) => 
  let wordClassName =  props.group == props.currentSelectedGroup  ? 'highLight':'default';
  return (
      <div className=`$wordClassName`
          onMouseEnter= props.onMouseEnter 
              onMouseLeave = props.onMouseLeave>
      This is my Word Group : props.group
      </div>);

  

export default App;

根据需要实现 highLight css 样式。

【讨论】:

但他说他不想使用状态 在我的实现中,Word 可以是无状态组件,只有从父组件接收到的道具。 把Word改成没有状态的功能组件。

以上是关于React/Redux:悬停一个组件时,更改所有组件的颜色的主要内容,如果未能解决你的问题,请参考以下文章

React Redux 状态在页面刷新时丢失

React Redux 表更新行

React + Redux + Router - 我应该为所有页面/组件使用一个状态/存储吗?

推送新 URL 时多次调用 React 组件渲染

[React]React-Redux用法

React redux和React路由器,链接更改不会重新渲染视图[重复]