reactjs - 如何设置defaultChecked从状态React功能组件复选框获取值(React - Hooks)

标签 reactjs react-hooks

我有 api 调用,其 jobdetail 对象的状态值等于 1

  const [jobdetail, setJobdetail] = useState([]);

  React.useEffect(() => {
     const getJobDetail = async () => {
      try {
         const resDataService = await DataService.jobinfo_detail(id)
         setJobdetail(resDataService);
     } catch (error) {
      console.log(error);
      }
   };
  getJobDetail();
}, []);

  React.useEffect(() => {
    reset(jobdetail);
  }, [jobdetail]);

api调用返回的json格式如下:

   {
     "id": 13,
     "client_name": "Pasir Ris - Punggol Town Council",
     "client_id": null,
      "division_name": "Pasir Ris East",
     "block": "12",
     "dateEntry": "14-04-2022",
     "natureofcomplain": "sample complaine",
     "address": "pasir ris east",
     "gtotal": "1080.0",
     "status": 1, // value is one
     "photo_url": "/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBFUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--70d8263aa1309bd12684731214cc57fb82a654fd/download.jpeg",
"defect_details": [
    {
        "id": 16,
        "uid": 16,
        "defects": "defects sample",
        "recommendation": "recommendation sample"
    }
],
"partsreplaces": [
    {
        "id": 19,
        "uid": 19,
        "jobinfo_id": 13,
        "sorcode": "asd1",
        "item": "pipe",
        "quantity": 12,
        "rates": "90.0",
        "subtotal": "1080.0"
    }
  ]
 }

这是我的复选框标签

   <Checkbox
          colorScheme="green" 
          size="lg"
          {...register("status")}
          onChange={(e) =>
          setValues({ ...values, status: e.target.value })
           }  
          defaultChecked = {jobdetail.status === 1 ? true : false} // this part checkbox is not checked where the jobdetail.status is 1 
     />

当我 console.log(jobdetail.status) 它返回 1 这就是为什么我很困惑为什么 defaultChecked 不起作用。希望可以有人帮帮我。谢谢

最佳答案

defaultChecked 属性在组件安装时使用,并且在组件的生命周期中不应更改。

解决方案

  • 保持输入不受控制,等待加载复选框输入,直到加载初始数据。

    const [jobdetail, setJobdetail] = useState([]);
    const [dataLoaded, setDataLoaded] = useState(false);
    
    React.useEffect(() => {
      const getJobDetail = async () => {
        try {
          const resDataService = await DataService.jobinfo_detail(id);
          setJobdetail(resDataService);
        } catch (error) {
          console.log(error);
        } finally {
          setDataLoaded(true);
        }
      };
    
      getJobDetail();
    }, []);
    
    ...
    
    {dataLoaded && (
      <Checkbox
        colorScheme="green" 
        size="lg"
        {...register("status")}
        onChange={(e) =>
          setValues({ ...values, status: e.target.value })
        }  
        defaultChecked={jobdetail.status === 1}
      />
    )}
    
  • 将输入转换为受控输入,使用checked属性而不是defaultChecked Prop 。

    <Checkbox
      colorScheme="green" 
      size="lg"
      {...register("status")}
      onChange={(e) =>
        setValues({ ...values, status: e.target.value })
      }  
      checked={jobdetail.status === 1}
    />
    

关于reactjs - 如何设置defaultChecked从状态React功能组件复选框获取值(React - Hooks),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71933757/

相关文章:

reactjs - 如何设置本地环境以在 https 上运行

javascript - ReactJs 将值传递给另一个 js 文件中的函数

javascript - 使用reactjs将数据保存为表单

reactjs - 如何在 React/Redux 应用程序的任何(重新)渲染后触发事件

javascript - React useEffect() 无限循环

reactjs - 在 React 自定义 Hook 中 onChange 时验证输入的最佳实践?

reactjs - TypeScript 与 Redux 容器斗争

reactjs - 检测子引用何时发生变化

material-ui - 如何修复此警告 "useLayoutEffect"相关警告?

reactjs - React Hook useEffect 缺少依赖项(没有在 useEffect 中移动函数)