如何在鼠标离开时提交滑块的值,而不是在鼠标离开之前提交所有的值?
P粉129731808
P粉129731808 2023-07-27 15:35:18
[React讨论组]
<p>我有一个输入字段和一个滑块,滑块的范围是从1到100。由于我还有切换开关和下拉菜单,我为每个字段都使用了onChange事件,而不是使用提交按钮,包括滑块。</p><p>但是我遇到了一个问题,如果我尝试将滑块从1改变到50,所有从1到50的值都会在onChange事件中被提交。我尝试使用onSlideEnd事件,但它显示旧值(例如:当从1选择50时,显示1;当从50选择20时,显示50)。</p><p>我希望在从1到50的变化中,只有50会在handleSubmit中发送到后端。</p><p>我尝试了这段代码,但没有起作用,请帮忙解决。</p><p><br /></p> <pre class="brush:php;toolbar:false;">import React, { useEffect, useState } from 'react'; import { Slider } from "primereact/slider"; import { InputText } from "primereact/inputtext"; //some imports const Config = () =&gt; { const [factorvalue, setFactorValue] = useState(1); const [isSliderDragging, setIsSliderDragging] = useState(false); useEffect(() =&gt; { fetchConfig(); }, []); const fetchConfig = async () =&gt; { try { // this is used to get config value from backend to set in front const response = await Service.getMaliciousFactorConfig(); if (response) { const maliciousFactorValue = response[0].maliciousFactor || 1; setFactorValue(maliciousFactorValue); } } catch (error) { console.log(error.message); } }; const handleSliderChange = (event) =&gt; { try{ const newValue = parseInt(event.value, 10); setFactorValue(newValue); handleSubmit(newValue); }catch(error){ console.log(error); } }; const handleSliderDragEnd = (event) =&gt; { setIsSliderDragging(false); }; const handleInputChange = (event) =&gt; { const newValue = parseInt(event.target.value, 10); if (!isNaN(newValue)) { setFactorValue(newValue); handleSubmit(newValue); } else { setFactorValue(""); } }; const handleSubmit = async(value) =&gt; { try{ if (value &gt;= 1 &amp;&amp; value &lt;= 100) { setValidationError(""); await ConfigService.setConfig(value); } }catch(error){ console.log(error); } }; return ( {//demo code} &lt;div className="displayFlex"&gt; &lt;label htmlFor="factor"&gt;Factor:&lt;/label&gt; &lt;div&gt; &lt;InputText id="factor" value={factorvalue} onChange={handleInputChange} className="w-full" /&gt; &lt;Slider value={factorvalue} onChange={handleSliderChange} onSlideEnd={handleSliderDragEnd} className="w-full" min={1} max={100} /&gt; &lt;/div&gt; &lt;/div&gt; {//some code} ); }; export default Config;</pre> <p><br /></p>
P粉129731808
P粉129731808

全部回复(1)
P粉262926195

防抖动(Debouncing)似乎是适合你的正确解决方案。. Read more

有一个React钩子(hook)可用。 here.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号