【问题标题】:Checkbox always passing false even if checked in React即使在 React 中选中,复选框也总是传递 false
【发布时间】:2021-12-26 21:23:39
【问题描述】:

我有一个复选框,当它被选中/取消选中时,它会在控制台中写入 true 或 false,但是,当我尝试保存值时,它总是传递 false。

html:

<input type="checkbox" 
       name="Status"
       value="Status"
       onChange={(e) => {carStatus(e)}) />
const CarState = {
      carId: 0,
      Make: "",
      Model: ""
      Active: ""   //this is a bit in the DB
}

const [carMake, setCarMake] = useState(CarState);
const [carModel, setCarModel] = useState(CarState);
const [carActive, setActive] = useState(CarState);

const carStatus = (e) => {
   const status = e.target.checked;
   if(status)
   {
      console.log("checked " + status);
      setCarActive({ ...carActive, status});
   }
   else
   {  
      console.log("checked" + status);
      setCarActive({ ...carActive, status});
   }

const saveCar = () => {
       var data = {
          make: carMake.CarMake,
          model: carModel.Model,
          active: saleActive.Active  //always false even if checkbox is checked
      };
  
     //passes data to the API

}

有没有更好的方法或不同的方法?如果复选框被选中,我可以在 F12 中看到真/假,但是,当我单击保存按钮 [saveCar 功能] 时,只会传递假

【问题讨论】:

    标签: reactjs react-native react-hooks use-state


    【解决方案1】:

    做这样的事情

    <input 
    type="checkbox" 
    name="Status"
    checked={carActive.Active === true}
    onChange={(e) => setActive(state=>({...Active:e.target.checked}))) />
    

    【讨论】:

      【解决方案2】:

      您没有更新嵌套的Active 状态,而是添加了status 属性并且没有引用它。使用checked 值并更新状态中的Active 属性。

      const [carActive, setCarActive] = useState(CarState);
      
      ...
      
      const carStatus = (e) => {
        const { checked } = e.target;
      
        console.log("checked " + checked);
      
        setCarActive(carActive => ({
          ...carActive,    // <-- shallow copy previous state
          Active: checked, // <-- set new Active checked value
        }));
      }
      

      在输入中,您应该引用状态。使用checked prop/attribute/

      <input
        type="checkbox" 
        name="Status"
        value="Status"
        checked={carActive.Active} // <-- set the checked prop of input
        onChange={carStatus}
      />
      

      saveCar 中引用正在更新的正确状态。确保所有被访问的属性都与carState 属性匹配。

      const saveCar = () => {
        var data = {
          make: carMake.Make,
          model: carModel.Model,
          active: carActive.Active 
        };
        
        //passes data to the API
      
      }
      

      工作演示

      【讨论】:

      • 仍然通过 False,当我运行 F12 时,如果我选中/取消选中复选框,我可以看到 true/false,但是如果选中复选框,它仍然保存为 false
      • 复选框的值,所以如果它被选中,它将作为 False 传递,如果它没有被选中,仍然作为 False 传递给我的 API 调用。但是,如果我运行 F12,我可以看到 console.log(“活动”+ 已选中),它表示选中时为 true,当我取消选中时为 false
      • 是的,我应用了您的更改,但该复选框在 [ saveCar ] 调用中仍然显示为 false
      • 我以前从未使用过它,但在这里,如果你能看到它,请告诉我:codesandbox.io/s/quiet-fire-mk8se?file=/src/App.js 如果选中该框,你可以看到它显示真/假,但是,当我去保存它,它在 API 调用上显示为 false
      • 仍将 API 设为 false,我复制了您的代码 sn-p。我要撕掉页面并重建它。我可以看到已选中:true,选中时,选中:false,未选中时,但即使选中了复选框,仍会以 false 形式进入 API。我现在不知所措
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 2021-08-09
      • 2021-08-24
      相关资源
      最近更新 更多