代码之家  ›  专栏  ›  技术社区  ›  Kamal Palei

ReactJS:根据axios发布结果,以红/绿背景显示状态

  •  2
  • Kamal Palei  · 技术社区  · 2 年前

    我有一个表格,我需要在表格下面显示状态。当我提交表格时,根据axios后的成功和失败,我会显示状态。截至今天,我可以显示以下错误状态 enter image description here

    当提交成功时,我想要什么,我想显示如下状态。

    enter image description here

    我有以下代码。

    //State
    const [stats, setStatus] = useState(null);
    
    //axios post
            try {
                const res = await axios.post('/exec/addcontroller', 
                    {user, name, ipaddr, port, sshuser, sshpass, sshport, license},
                    {headers: {
                        'Content-Type': 'application/json',
                        'Authorization': token,
                    }}
                ).then( function (res) {
                    if(res.status === 200) {
                        //success
                    } else {
                        setStatus("Error");
                    }
                });
            }catch(err) {
                setStatus(err.response.data.message);
            }
    
    //form code goes here
    
    //status div
    {status && <div id="error">{status}</div>}
    

    css如下所示

    #error {
      color: #FF0040;
      border: 1px solid #F7819F;
      padding: 5px;
      background-color: #F8E0E6;
    }
    

    所以,在成功的案例中,我需要的是用深绿色的字母和浅绿色的背景来显示状态。如何做出反应?

    1 回复  |  直到 2 年前
        1
  •  2
  •   Phil    2 年前

    您需要在状态中添加更多信息(或使用多个状态变量),不仅指示消息,还指示错误状态。

    使用具有的对象尝试这样的操作 type message 特性

    setStatus(null);
    try {
      const data = { user, name, ipaddr, port, sshuser, sshpass, sshport, license };
      const res = await axios.post('/exec/addcontroller', data, {
        headers: {
          Authorization: token,
        },
      });
      setStatus({
        type: 'success',
        message: `Controller ${name} added successfully`,
      });
    } catch (err) {
      setStatus({
        type: 'error',
        message: err.response?.data.message ?? 'An error occurred',
      });
    }
    

    并像这样渲染

    {status && <div className={`alert ${status.type}`}>{status.message}</div>}
    

    你可以使用 id 而不是 className 但我觉得CSS类在这里更有意义。

    .alert {
      border: 1px solid;
      padding: 5px;
    }
    
    .alert.error {
      color: #ff0040;
      background-color: #f8e0e6;
      border-color: #f7819f;
    }
    
    .alert.success {
      color: darkgreen;
      border-color: darkgreen;
      background-color: lightgreen;
    }
    

    注意,我删除了 Content-Type 请求的标头。在这种情况下,它是完全多余的。