我有一个输入域和滑块,它的范围从1到100. 因为我有切换switch 和下拉按钮,所以我 for each 字段保留onChange事件,而不是提交按钮,包括滑块.

但我面临着一个问题,如果我试图改变滑块从1到50所有的值提交使用onChange,我试图使用onSlideEnd,但它显示旧值(例如:显示1当从1 Select 50时显示50,并显示50从50 Select 时).

我想要的是从1到50只有50个应该从handleSubmit发送到后端

我试过这个代码,但不起作用,请帮帮我

import React, { useEffect, useState } from 'react';
import { Slider } from "primereact/slider";
import { InputText } from "primereact/inputtext";
//some imports

const Config = () => {

  const [factorvalue, setFactorValue] = useState(1);
  const [isSliderDragging, setIsSliderDragging] = useState(false);

  useEffect(() => {
    fetchConfig();
  }, []);
  
  const fetchConfig = async () => {
    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) => {
    try{
      const newValue = parseInt(event.value, 10);
      setFactorValue(newValue);
      handleSubmit(newValue);
    }catch(error){
      console.log(error);
    }
  };

  const handleSliderDragEnd = (event) => {
    setIsSliderDragging(false);
  };

  const handleInputChange = (event) => {
    const newValue = parseInt(event.target.value, 10);
    if (!isNaN(newValue)) {
      setFactorValue(newValue);
      handleSubmit(newValue);
    } else {
      setFactorValue("");
    }
  };

    const handleSubmit = async(value) => {
      try{
         if (value >= 1 && value <= 100) {
            setValidationError("");
            await ConfigService.setConfig(value);
         }
      }catch(error){
         console.log(error);
      }
    };

  return (
          {//demo code}
          <div className="displayFlex">
            <label htmlFor="factor">Factor:</label>
             <div>
               <InputText id="factor" value={factorvalue} onChange={handleInputChange} className="w-full" />
               <Slider value={factorvalue} onChange={handleSliderChange} onSlideEnd={handleSliderDragEnd} className="w-full" min={1} max={100} />
             </div>
          </div>
          {//some code}
  );
};

export default Config;

推荐答案

你的 idea 是正确的.遵循以下步骤使其工作(假设您想要在onSlideEnd次火灾时提交)

  1. 当滑块变化时,更新fractionValue,但不要拨打handleSubmit.
  2. onSlideEnd中拨打handleSubmit
<Slider value={factorvalue} onChange={handleSliderChange} onSlideEnd={()=> handleSubmit(factorvalue)} className="w-full" min={1} max={100} />

Javascript相关问答推荐

如何保持子画布元素的1:1宽高比?

如何使用JavaScript用等效的功能性HTML替换标记URL格式?

RxJS setTimeout操作符等效

如何访问Json返回的ASP.NET Core 6中的导航图像属性

如何分配类型脚本中具有不同/额外参数的函数类型

通过在页面上滚动来移动滚动条

使用下表中所示的值初始化一个二维数组

为什么promise对js中的错误有一个奇怪的优先级?

显示图—如何在图例项上添加删除线效果?

更改预请求脚本中重用的JSON主体变量- Postman

对路由DOM嵌套路由作出react

使用getBorbingClientRect()更改绝对元素位置

在数组中查找重叠对象并仅返回那些重叠对象

查询参数中的JAVASCRIPT/REACT中的括号

覆盖加载器页面避免对页面上的元素进行操作

当我try 将值更改为True时,按钮不会锁定

Reaction即使在重新呈现后也会在方法内部保留局部值

如何在下一个js中更改每个标记APEXCHARTS图表的 colored颜色

rxjs在每次迭代后更新数组的可观察值

不允许在对象文本中注释掉的属性