4 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
#1 數(shù)據(jù)重復(fù)必須在服務(wù)器端受到限制。
我會(huì)推薦一些緩存,例如node-cache。節(jié)點(diǎn)緩存會(huì)存在可擴(kuò)展性問(wèn)題,因此最好使用redis。(邏輯應(yīng)該是smt。例如:如果表單已使用
user_id
, 或 withform_id
提交,您可以為其創(chuàng)建一個(gè)緩存,如果繼續(xù),則將其存儲(chǔ)在數(shù)據(jù)庫(kù)中,其他情況會(huì)引發(fā)錯(cuò)誤。在其他瀏覽器上submit
如果既不unique_id
在緩存中也不在 中,則必須在之前進(jìn)行驗(yàn)證db
。如果存在,則可能會(huì)在 nr.2 瀏覽器中引發(fā)錯(cuò)誤。
#2 如果你想禁用該按鈕,你必須使用websockets

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊
從 UI/UX 角度來(lái)看,處理此問(wèn)題的最佳方法是使用驗(yàn)證。如果User A
單擊“提交”,然后User B
從不同的瀏覽器或選項(xiàng)卡單擊“提交”,則應(yīng)顯示錯(cuò)誤以User B
指示“此操作已發(fā)生”。
話(huà)雖如此,您想要實(shí)現(xiàn)的目標(biāo)是可能的。
一種方法是使用 WebSocket。WebSocket 是客戶(hù)端和服務(wù)器之間的持久連接,允許雙向通信。
React 應(yīng)用程序中帶有提交按鈕的頁(yè)面將是某個(gè) websocket 通道的“訂閱者”。當(dāng)?shù)谝淮螁螕籼峤话粹o時(shí)(無(wú)論從哪里單擊),消息都可以從 WebSocket 服務(wù)器“發(fā)布”給ALL
訂閱者,無(wú)論使用什么瀏覽器或選項(xiàng)卡。
onMessage
基本上,您可以在 React 應(yīng)用程序中添加一個(gè)處理程序,您可以在收到特定消息時(shí)禁用提交按鈕。
我不知道你在服務(wù)器端使用什么技術(shù),但是對(duì)于 WebSocket 服務(wù)器,有很多選擇。對(duì)于 React 應(yīng)用程序,有一個(gè)可以直接使用的react-websocket 。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊
你可以在客戶(hù)端完成
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);
};
}, []);
.
.
.
};
添加回答
舉報(bào)