html 复选框默认值不匹配状态

gt0wga4j  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(51)

我希望有一个复选框,其默认值与数据库中的值相匹配。我目前的问题是,默认值始终为false,即使数据库值为true。
以下是我目前的想法+代码:
我将默认值存储为一个状态:
第一个月
然后在页面加载开始时使用useEffect钩子从数据库读取一次。

useEffect(() => {
    const fetchEnabled = async () => {
      const reference = ref(db, 'Permissions/');
      onValue(reference, (snapshot) => {
        setDefaultEnabled(snapshot.val());
        // This read to the database works - that is, snapshot.val() does indeed return the correct boolean value
      });
    };

    fetchEnabled();
  }, []);

字符串
最后,我有复选框本身[复选框功能工作,不影响状态]。
<input type='checkbox' onChange={handleChecked} defaultChecked={defaultEnabled}/>
我怀疑问题来自于开始时的useState(false),但我的理解是,当useEffect运行时,它会更新状态,这将导致复选框重新呈现正确的值。
任何帮助将不胜感激!

8ehkhllq

8ehkhllq1#

你可以像下面这样安装yn库和设置状态。

  1. npm install yn
  2. setDefaultEnabled(yn(snapshot.瓦尔();
dvtswwa3

dvtswwa32#

问题是defaultChecked在第一次渲染时需要一个值,因此它使用初始值false,而不是等待useEffect。
这可以通过执行checked={defaultEnabled}来解决,因为状态将更新这个非默认的checked属性。

相关问题