reactjs - 我的 React 钩子如何不尊重默认值?
问题描述
我有一个这样的组件
export default function Panel() {
const rpcClient = RpcClient.getInstance(PLUGIN_ID);
setupOnce(rpcClient);
const [currentXMPID, setCurrentXMPID] = useState<string | null>(null);
function isAttachStorageOn(): boolean {
if (!currentXMPID) {
return false;
}
// real code looks at a cookie
return true;
}
// This panel is frequently re-rendered and we need to use saved setting if XMP ID was retrieved already
const renderAttachState = isAttachStorageOn();
// this is outputting true
console.log('set attach checked default to', renderAttachState);
const [isAttachChecked, setAttachChecked] = useState(renderAttachState);
// this is outputting false
console.log('after using state', isAttachChecked);
// This will only fire once
useEffect(() => {
(async () => {
const xmpID = await rpcClient.getXMPID();
setCurrentXMPID(xmpID);
setAttachChecked(isAttachStorageOn());
})();
}, []);
return <div>Just a test</div>;
}
我很困惑,因为它记录true
然后false
。这似乎零意义。我在一个我控制有限的应用程序中运行这个组件。我确实发现这个组件被重新渲染了很多,我想知道是否可能存在问题......但即使它重新渲染 1000 次,它也应该这样做以使console.log
s 匹配。
更新
似乎钩子保持不变,首先给出的值useEffect
只运行一次。如果我设置setAttachChecked
为该bananas
方法,则后续调用不会更新它。
解决方案
好吧,我不确定这是否是您正在寻找的解决方案。
useState
用于设置默认值。这条线在这里
console.log('after using state', isAttachChecked);
用于显示isAttachChecked
价值。它可能第一次等于defaultValue
第一次,但之后可能不会,即使你在useState
钩子之后调用它。
推荐阅读
- android - 关闭 Firebase 上的实时更改 (Android)
- java - 使用 Spring Boot 从 Swapi API https://swapi.co/api/people/ 获取数据
- python - 用python beautiful soup从h1和id中提取文本
- excel - 将多个 Excel 文件合并到一个工作簿时出错
- java - 如何使用 Apache POIFS/HSMF 更改 Outlook .msg 文件的附件
- java - 为什么将休眠查询结果传递给 toJson 方法时会出错?
- google-cloud-platform - 适用于 Compute Engine 的 GCP API 网关
- reactjs - 如何在 React 的辅助函数中使用状态?
- reactjs - React JS Axios 地图
- python - 2021年用python发邮件最方便的方法是什么?