首页 > 解决方案 > 超时后关闭反应错误消息

问题描述

我正在尝试显示一些反应错误消息并在超时 5 秒后隐藏它们。下面是代码:

import * as React from 'react'
import {ErrorInfo} from '../Twilio/api'
export const Error = ({type, message, visible}: ErrorInfo) => (
    // visible=true,
    setTimeout(function () {
        visible = false
    }, 5000),
        visible ?
            <div>
                <p>
                    <strong>{type}:</strong> {message}
                    <br/>
                    <small>
                        UI version: <code>{GLOBAL_VERSION}</code>
                    </small>
                </p>
            </div> : <span/>
)

ErrorInfo如下:

export type ErrorInfo = {
    type: string
    message: string
    visible: boolean
}

但是,visible设置为未定义,因此不会显示错误消息。如果我在导出时将其设置为 true Error,那么当它变为 false 时,它​​会被Header元素显示,不会被删除visible

标签: reactjstwilio-programmable-chattsx

解决方案


您想控制组件visible中的状态Error

然后,您可以useEffect在 5 秒后隐藏错误(通过适当的清理)

export const Error = ({ type, message }: ErrorInfo) => {
   const [visible, setVisible] = useState(false)
   useEffect(() => {
     // message is empty (meaning no errors). Adjust as needed
     if(!message){
      setIsVisible(false)
      return
     }
     // error exists. Display the message and hide after 5 secs
     setIsVisible(true)
     const timer = setTimeout(() => {
       setIsVisible(false)
     }, 5000);
     return () => clearTimeout(timer);
   }, [message]) // executes every time `message` changes. Adjust as needed
   if(!visible) return null
   return (
      <div>
        <p>
            <strong>{type}:</strong> {message}
            <br />
            <small>
                UI version: <code>{GLOBAL_VERSION}</code>
            </small>
        </p>
    </div>
   )
}

推荐阅读