reactjs - React - 如何调用另一个回调函数中的函数
问题描述
我有如下代码
这里我想从回调函数expandSchema中调用函数expandUnexpandSchema。如何做到这一点?我可以从 expandSchema 调用 loadSchemaInfo 回调函数,但这会导致所有代码执行。但我只想执行特定的块。
function useSchemaState() {
const [expand, setExpand] = useKeyState('expand', false);
const expandSchema = useCallback(() => {
setExpand((expand) => !expand);
loadSchemaInfo();
}, [setExpand]);
const loadSchemaInfo = useCallback(
async(connectionId, reload) => {
// Some more lines of code
const expanded = {};
expandUnexpandSchema() {
if (data) {
Object.keys(data).forEach((schemaName) => {
expanded[schemaName] = expand;
});
};
}
);
};
提前谢谢各位。
更新:
if (data) // 这里的数据是通过调用REST API来获取的,如果要再次获取的话会花费很多时间。如果在 loadSchemaInfo 之外定义 expandUnexpandSchema ,有没有办法通过将数据存储在变量中而不丢失数据来保留数据?
解决方案
在 loadSchemaInfo 之外定义它并在 loadSchemaInfo 和 expandSchema 中调用它,或者试试这个:
const expandSchema = useCallback(() => {
setExpand((expand) => !expand);
loadSchemaInfo.expandUnexpandSchema();
}, [setExpand]);
const loadSchemaInfo = useCallback(
async(connectionId, reload) => {
// Some more lines of code
const expanded = {};
expandUnexpandSchema() {
if (data) {
Object.keys(data).forEach((schemaName) => {
expanded[schemaName] = expand;
});
};
}
loadSchemaInfo.expandUnexpandSchema = expandUnexpandSchema;
);
};
当涉及到函数时,大括号之间的任何内容都无法被外部访问,除非可以访问,例如通过点符号属性赋值或 return 语句。您可以在外部函数外部或内部进行赋值,但无论哪种方式,它都需要外部操作,最低限度是运行外部函数一次。– Magnus Lind Oxlund 2019 年 6 月 2 日 12:21
推荐阅读
- python - 在 CMD 中运行 Python
- flutter - Flutter:SingleChildScrollView 底部溢出错误
- node.js - 我应该使用什么工作流程将 NodeJS 应用程序部署到固定服务器?
- java - Java Spring Boot 控制台应用程序覆盖错误
- c - FILE *fp (TURBO C++) 中的声明语法错误
- sql-server - 尝试使用登录前握手确认时超时时间已过
- c++ - 基本 C++ 文件处理问题
- javascript - 如何通过切换单选按钮获取特定 GeoServer 层的 URL?
- flutter - 如何在颤动的一个程序中从列表类型的未来调用和简单的未来调用中获取数据
- python - 哇,改变缩进破坏了我的程序?