我希望有一个复选框,其默认值与数据库中的值相匹配。我目前的问题是,默认值始终为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运行时,它会更新状态,这将导致复选框重新呈现正确的值。
任何帮助将不胜感激!
2条答案
按热度按时间8ehkhllq1#
你可以像下面这样安装yn库和设置状态。
dvtswwa32#
问题是
defaultChecked
在第一次渲染时需要一个值,因此它使用初始值false,而不是等待useEffect。这可以通过执行
checked={defaultEnabled}
来解决,因为状态将更新这个非默认的checked属性。