看到的文章链接如下https://mp.weixin.qq.com/s/8G...

/** 1. 信号灯控制器用 React 实现一个信号灯(交通灯)控制器,要求:1. 默认状况下,  1.1. 红灯亮20秒,并且最初5秒闪动  1.2. 绿灯亮20秒,并且最初5秒闪动  1.3. 黄灯亮10秒  1.4. 秩序为 红-绿-黄-红-绿-黄2. 灯的个数、色彩、持续时间、闪动工夫、灯光秩序都可配置,如:   lights=[{color: '#fff', duration: 10000, twinkleDuration: 5000}, ... ]*/import React from 'react'import ReactDOM from 'react-dom'class TrafficLightItem extends React.Component {}

工夫还是挺紧的 有些写的比拟粗率
twinkle成果没写 间接用css实现就好了 在twinkleState为true时 加闪动的款式 不小心写了个小Bug 坑了波本人 一共花了差不多1个小时写进去如下所有代码
编辑红绿灯配置以及批改程序没写 临时只反对了通过input输出配置
能够轻易找个网站如https://codesandbox.io/s/93m5... 复制代码 查看成果

import React, { useState } from "react";import ReactDOM from "react-dom";class Control extends React.Component {  constructor(props) {    super(props);    this.color = React.createRef();    this.duration = React.createRef();    this.twinkleDuration = React.createRef();  }  state = {    lightList: [],    showTip: false  };  handleLighgData = () => {    let [c, d, twinkle] = this.getRefValue();    let isEmptyValue = this.isEmptyValue;        if (isEmptyValue(c) || isEmptyValue(d) || isEmptyValue(twinkle)) {      this.setState({ showTip: true })      return false;    }    let lightList = this.state.lightList;    lightList.push({      color: c,      duration: d,      twinkle: twinkle    });    this.setState({ lightList, showTip: false });  };  isEmptyValue = (value) => {    return (      value === "" || value === null || value === false || value === void 0    );  };  getRefValue = () => {    return [      this.color.current.value,      this.duration.current.value,      this.twinkleDuration.current.value    ];  };  editLight = (index) => {    //待实现  };  render() {    const { lightList, showTip } = this.state;    return (      <>        <div>          Color: <input ref={this.color} />        </div>        <div>          Duration: <input ref={this.duration} />        </div>        <div>          twinkleDuration: <input ref={this.twinkleDuration} />        </div>        <input type="submit" onClick={this.handleLighgData} />        {showTip ? <span>每个参数都是必填的</span> : ""}        {lightList.length > 0 &&          lightList.map((item, index) => {            return (              <div key={item.color + index}>                {item.color},{item.duration},{item.twinkleDuration}                <span onClick={this.editLight.bind(this, index)}>Edit</span>              </div>            );          })}        <TrafficLightItem lightList={lightList} />      </>    );  }}class TrafficLightItem extends React.Component {  state = {    curLight: {},    curLightList: [],    showLight: true,    twinkleState: false  };  startLight = () => {    let { lightList } = this.props;    if (lightList.length === 0) return false;    if (this.state.curLightList.length > 0) return false;    this.setState({ curLightList: lightList }, () => {      this.handleLightTime();    });  };  handleLightTime = () => {    let { curLight, curLightList } = this.state;    if (curLightList.length === 0) return false;    let state = null;    if (curLight.color !== void 0) {      state = curLight;    } else {      state = curLightList[0];      curLightList.shift();      this.setState({ curLightList });    }    this.setState({ curLight: state });    if (state.duration !== 0) {      setTimeout(() => {        this.setState(          { curLight: Object.assign(state, { duration: 0 }) },          () => {            this.handleLightTime();          }        );      }, state.duration);    } else if (state.twinkleDuration !== 0) {      this.setState({ twinkleState: true });      setTimeout(() => {        this.setState({ curLight: {}, twinkleState: false }, () => {          this.handleLightTime();        });      }, state.twinkleDuration);    }  };  render() {    let { curLight, twinkleState } = this.state;    return (      <>        <hr />        <input type="button" value="start" onClick={this.startLight} />        <div          style={{            width: 10,            height: 10,            borderRadius: "50%",            border: "solod 1px #000",            background: curLight.color          }}        >                  </div>      </>    );  }}const rootElement = document.getElementById("root");ReactDOM.render(<Control />, rootElement);