当前位置:首页 > React

react 实现toast

2026-01-26 14:46:27React

实现 React Toast 通知组件

在 React 中实现 Toast 通知可以通过自定义组件或使用第三方库完成。以下是两种常见方法:

自定义 Toast 组件

react 实现toast

创建一个可复用的 Toast 组件,通过状态管理控制显示/隐藏:

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

const Toast = ({ message, duration = 3000, onClose }) => {
  const [visible, setVisible] = useState(true);

  useEffect(() => {
    const timer = setTimeout(() => {
      setVisible(false);
      onClose && onClose();
    }, duration);
    return () => clearTimeout(timer);
  }, [duration, onClose]);

  return visible ? (
    <div style={{
      position: 'fixed',
      bottom: '20px',
      right: '20px',
      padding: '12px 16px',
      background: '#333',
      color: 'white',
      borderRadius: '4px',
      boxShadow: '0 2px 10px rgba(0,0,0,0.1)',
      zIndex: 1000
    }}>
      {message}
    </div>
  ) : null;
};

// 使用示例
function App() {
  const [toasts, setToasts] = useState([]);

  const addToast = (message) => {
    const id = Date.now();
    setToasts([...toasts, { id, message }]);
  };

  const removeToast = (id) => {
    setToasts(toasts.filter(toast => toast.id !== id));
  };

  return (
    <div>
      <button onClick={() => addToast('This is a toast message!')}>
        Show Toast
      </button>
      {toasts.map(toast => (
        <Toast
          key={toast.id}
          message={toast.message}
          onClose={() => removeToast(toast.id)}
        />
      ))}
    </div>
  );
}

使用第三方库

react 实现toast

流行的 React Toast 库提供更多功能和自定义选项:

  1. react-toastify (推荐)
    npm install react-toastify
import { ToastContainer, toast } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';

function App() {
  const showToast = () => {
    toast.success('Operation completed!', {
      position: "top-right",
      autoClose: 5000,
      hideProgressBar: false,
      closeOnClick: true,
      pauseOnHover: true,
      draggable: true,
    });
  };

  return (
    <div>
      <button onClick={showToast}>Show Toast</button>
      <ToastContainer />
    </div>
  );
}
  1. sonner (轻量级替代方案)
    npm install sonner
import { Toaster, toast } from 'sonner';

function App() {
  return (
    <div>
      <button onClick={() => toast('My first toast')}>
        Show Toast
      </button>
      <Toaster position="top-center" richColors />
    </div>
  );
}

关键实现要点

  • 定位通常使用 fixed 或 absolute 定位在屏幕角落
  • 自动消失功能通过 setTimeout 实现
  • 多个 Toast 需要队列管理避免重叠
  • 支持不同类型的通知(成功/错误/警告)
  • 添加动画效果提升用户体验

第三方库通常提供更完善的解决方案,包括动画、队列管理、主题定制等功能,推荐在正式项目中使用。自定义组件适合简单需求或学习目的。

标签: reacttoast
分享给朋友:

相关文章

react 如何遍历

react 如何遍历

遍历数组 在React中遍历数组通常使用map方法,它会返回一个新的数组。map是处理数组并渲染列表元素的首选方法。 const items = ['Apple', 'Banana', 'Cherr…

react如何同步修改

react如何同步修改

同步修改状态的常见方法 在React中同步修改状态通常涉及使用useState或useReducer钩子,结合React的批处理机制确保状态更新的一致性。以下是几种典型场景的解决方案: 直接使用us…

react如何重新加载

react如何重新加载

重新加载当前页面 在React中重新加载当前页面可以通过window.location.reload()方法实现。该方法会强制浏览器重新加载当前URL,类似于按下F5刷新页面。 const relo…

如何设计react组件

如何设计react组件

设计 React 组件的核心原则 React 组件的设计需要遵循高内聚、低耦合的原则,确保组件功能独立且易于维护。组件的设计可以分为展示组件和容器组件两类,展示组件负责 UI 渲染,容器组件负责逻辑处…

react如何获取路由

react如何获取路由

获取当前路由路径 在React中获取当前路由路径可以通过react-router-dom提供的useLocation钩子。useLocation返回一个包含当前路由信息的对象,其中pathname属性…

react如何用echarts

react如何用echarts

在React中使用ECharts 安装ECharts和React专用封装库: npm install echarts echarts-for-react 基础使用示例 创建一个基础的柱状图组件:…