亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

React :處理多個瀏覽器、瀏覽器選項卡以限制重復操作

React :處理多個瀏覽器、瀏覽器選項卡以限制重復操作

梵蒂岡之花 2023-11-12 15:00:54
我有一個按鈕,Submit單擊時會執行一些調用 API 的操作。單擊后,按鈕被禁用或基本上按鈕的初始狀態和操作被更改。我有兩個或多個瀏覽器選項卡,它們顯示相同的屏幕Submit。如果在任一選項卡中Submit執行該操作,其他選項卡應顯示更新的版本。其他選項卡應顯示禁用版本,并且不應顯示初始狀態。我該如何實現這一目標?我正在使用 React、JS
查看完整描述

4 回答

?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

#1 數據重復必須在服務器端受到限制。

  • 我會推薦一些緩存,例如node-cache。節點緩存會存在可擴展性問題,因此最好使用redis。(邏輯應該是smt。例如:如果表單已使用user_id, 或 withform_id提交,您可以為其創建一個緩存,如果繼續,則將其存儲在數據庫中,其他情況會引發錯誤。在其他瀏覽器上submit如果既不unique_id在緩存中也不在 中,則必須在之前進行驗證db。如果存在,則可能會在 nr.2 瀏覽器中引發錯誤。

#2 如果你想禁用該按鈕,你必須使用websockets


查看完整回答
反對 回復 2023-11-12
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

從 UI/UX 角度來看,處理此問題的最佳方法是使用驗證。如果User A單擊“提交”,然后User B從不同的瀏覽器或選項卡單擊“提交”,則應顯示錯誤以User B指示“此操作已發生”。

話雖如此,您想要實現的目標是可能的。

一種方法是使用 WebSocket。WebSocket 是客戶端和服務器之間的持久連接,允許雙向通信。

React 應用程序中帶有提交按鈕的頁面將是某個 websocket 通道的“訂閱者”。當第一次單擊提交按鈕時(無論從哪里單擊),消息都可以從 WebSocket 服務器“發布”給ALL訂閱者,無論使用什么瀏覽器或選項卡。

onMessage基本上,您可以在 React 應用程序中添加一個處理程序,您可以在收到特定消息時禁用提交按鈕。

我不知道你在服務器端使用什么技術,但是對于 WebSocket 服務器,有很多選擇。對于 React 應用程序,有一個可以直接使用的react-websocket 。


查看完整回答
反對 回復 2023-11-12
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

你可以在客戶端完成


const Form = () => {

  const [buttonDisabled, setButtonDisable] = useState(false);


  // first tab fire

  const onSubmit = () => {

    .

    .

    .

    localStorage.setItem("formSubmited", "true");

  };


  useEffect(() => {

    const disableButton = (e) => {

      if (e.storageArea.formSubmited) {

        setButtonDisable(true);

      }

    };

    // second tab fire

    window.addEventListener("storage", disableButton);

    return () => {

      window.removeEventListener("storage", disableButton);

    };

  }, []);

 .

 .

 .

};


查看完整回答
反對 回復 2023-11-12
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

限制是它不能在不同的瀏覽器/機器上運行。



查看完整回答
反對 回復 2023-11-12
  • 4 回答
  • 0 關注
  • 248 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號