javascript - 创建一个填充 React 的按钮

标签 javascript reactjs

我是新来的,我有个问题找不到答案..

我目前正在使用 ReactJS 开发一个网站,我希望有一个按钮在用户点击它时自动填充。该按钮总共应该有 5 个阶段。

我并不是要求您为我编写代码,而只是帮助我找到解决此问题的最佳方法。

那么我到底在问什么?正如您在此处看到的

image link

它是一个盒装元素,每当用户点击它时(它可以点击整个元素),进度就会填充,变成这样

something like this

所以第一行现在被标记了。当用户再次按下它时,第二个栏会填充

2nd bar fills

重要 - 这些栏内将有文本填充。

到目前为止我做了什么?我一直在考虑每次用户按下元素时都有 5 个不同的图像,但我想知道是否可能是一种更好的方法(比如让 DIV 背景图像,并在用户按下时填充子 div...)

我希望我说清楚了,谢谢大家抽出宝贵时间!

最佳答案

这是一个工作示例。您不需要所有不同状态的图像。使用 HTML 动态执行此操作要灵活得多。

关键是跟踪按钮被点击的次数。在此示例中,它使用 currentState 来跟踪它被点击的次数。

const defaultStyle = {
  width: 100,
  padding: 5,
};

class MultiLevelButton extends React.Component {
  constructor(props) {
    super(props);
    
    this.state = {
      currentState: 0,
    };
    
    this.handleClick = this.handleClick.bind(this);
  }
  
  handleClick() {
    const { currentState } = this.state;
    
    if (currentState < this.props.states.length) {
      this.setState({
        currentState: currentState + 1,
      });
    }
  }
  
  reset() {
    this.setState({
      currentState: 0,
    });
  }
  
  render() {
    const { currentState } = this.state;
    const { states } = this.props;
    
    return (
      <button onClick={this.handleClick} style={{border: 'none', outline: 'none'}}>
        {
          states
            .map((s, i) => {
              const stateNumber = states.length - i;
              const overrides = stateNumber <= currentState ? { backgroundColor: '#000', color: '#fff' } : {};
              const style = {
                ...defaultStyle,
                backgroundColor: s,
                ...overrides,
              };
              return <div style={{...style}}>{stateNumber}</div>
            })
        }
      </button>
    )
  }
}

const buttonRef = React.createRef();

ReactDOM.render(
  <div>
    <MultiLevelButton ref={buttonRef} states={['#bbb', '#ccc', '#ddd', '#eee', '#fff']} />
    <MultiLevelButton states={['#fcc', '#cfc', '#ccf']} />
    <div>
      <button onClick={() => buttonRef.current.reset()}>Reset</button>
    </div>
  </div>,
  document.getElementById('app')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="app" />

关于javascript - 创建一个填充 React 的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58405781/

相关文章:

javascript - 使用 Raphael JS 将所​​有 SVG 文本节点转换为路径节点

javascript - ngCordova:oauth 与谷歌失败

javascript - react 无状态组件

node.js - 尽管浏览器为 Hello World 提供了正确的输出,但在文件夹中看不到 Bundle.js 文件。 ReactJS、npm、babel、webpack 服务器

javascript - React-Tooltip 在 SVG 中不起作用

javascript - 将日期转换为天数然后做一些事情

javascript - 阴影重叠多边形

启动 Spring WebFlow2 过渡的 Javascript 代码

javascript - 在 Meteor React 客户端中显示所有用户

javascript - React js中防止事件冒泡 'ineffective'