当前位置:首页 > React

react实现信号灯

2026-01-27 16:08:42React

实现思路

使用React的状态管理来控制信号灯的切换逻辑,通过CSS样式实现不同颜色的灯光显示效果。

组件结构

创建SignalLight组件,包含三种颜色的灯(红、黄、绿),通过状态控制当前亮起的灯。

状态管理

使用useState和useEffect来管理当前激活的灯颜色和自动切换逻辑。

import React, { useState, useEffect } from 'react';

function SignalLight() {
  const [activeLight, setActiveLight] = useState('red');

  useEffect(() => {
    const timer = setInterval(() => {
      setActiveLight(prev => {
        if (prev === 'red') return 'green';
        if (prev === 'green') return 'yellow';
        return 'red';
      });
    }, 3000); // 每3秒切换一次

    return () => clearInterval(timer);
  }, []);

  return (
    <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>
      <div 
        style={{
          width: 100,
          height: 100,
          borderRadius: '50%',
          backgroundColor: activeLight === 'red' ? 'red' : 'gray',
          margin: 10
        }}
      />
      <div 
        style={{
          width: 100,
          height: 100,
          borderRadius: '50%',
          backgroundColor: activeLight === 'yellow' ? 'yellow' : 'gray',
          margin: 10
        }}
      />
      <div 
        style={{
          width: 100,
          height: 100,
          borderRadius: '50%',
          backgroundColor: activeLight === 'green' ? 'green' : 'gray',
          margin: 10
        }}
      />
    </div>
  );
}

export default SignalLight;

样式优化

可以添加边框和阴影效果使信号灯更逼真。

const lightStyle = {
  width: 100,
  height: 100,
  borderRadius: '50%',
  margin: 10,
  border: '2px solid black',
  boxShadow: '0 0 10px rgba(0,0,0,0.5)'
};

手动控制版本

如果需要手动控制信号灯切换,可以添加按钮控制。

function ManualSignalLight() {
  const [activeLight, setActiveLight] = useState('red');

  return (
    <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>
      <div style={{ ...lightStyle, backgroundColor: activeLight === 'red' ? 'red' : 'gray' }} />
      <div style={{ ...lightStyle, backgroundColor: activeLight === 'yellow' ? 'yellow' : 'gray' }} />
      <div style={{ ...lightStyle, backgroundColor: activeLight === 'green' ? 'green' : 'gray' }} />

      <div style={{ marginTop: 20 }}>
        <button onClick={() => setActiveLight('red')}>红</button>
        <button onClick={() => setActiveLight('yellow')}>黄</button>
        <button onClick={() => setActiveLight('green')}>绿</button>
      </div>
    </div>
  );
}

动画效果

使用CSS过渡动画使灯光切换更平滑。

.light {
  transition: background-color 0.5s ease;
}

完整组件

将信号灯封装为可复用的组件,支持自定义时间和颜色。

function TrafficLight({ lights = ['red', 'yellow', 'green'], duration = 3000 }) {
  const [activeIndex, setActiveIndex] = useState(0);

  useEffect(() => {
    const timer = setInterval(() => {
      setActiveIndex(prev => (prev + 1) % lights.length);
    }, duration);

    return () => clearInterval(timer);
  }, [lights.length, duration]);

  return (
    <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>
      {lights.map((color, index) => (
        <div 
          key={color}
          className="light"
          style={{ 
            ...lightStyle,
            backgroundColor: index === activeIndex ? color : 'gray'
          }}
        />
      ))}
    </div>
  );
}

react实现信号灯

标签: 信号灯react
分享给朋友:

相关文章

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

react如何验证

react如何验证

表单验证方法 在React中验证表单数据通常使用以下几种方式: 内置HTML5验证 利用HTML5原生表单验证属性如required、pattern等,结合form.noValidate属性禁用浏览…

react如何encode

react如何encode

React 中编码的实现方式 在 React 中,编码通常涉及对 URL、HTML 实体或特殊字符的处理。以下是几种常见的编码方法: 使用 encodeURIComponent 进行 URL 编码…

如何配置react

如何配置react

配置React项目的步骤 安装Node.js和npm 确保系统已安装Node.js(包含npm)。可通过官网下载并安装最新版本。安装完成后,运行以下命令验证版本: node -v npm -v 创建…

react如何发音

react如何发音

React的发音 React的正确发音为 /riˈækt/,类似于“ree-akt”。以下是详细说明: 发音分解 第一个音节“Ree”发音类似英文单词“see”中的“ee”音。…

如何提高react

如何提高react

优化性能 使用React.memo对组件进行记忆化处理,避免不必要的重新渲染。对于类组件,可以使用PureComponent来达到类似效果。 利用useMemo缓存计算结果,避免重复计算。对于函数或…