首页 > 解决方案 > 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 ,有没有办法通过将数据存储在变量中而不丢失数据来保留数据?

标签: reactjs

解决方案


在 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;
    );

};

基于Javascript调用嵌套函数

当涉及到函数时,大括号之间的任何内容都无法被外部访问,除非可以访问,例如通过点符号属性赋值或 return 语句。您可以在外部函数外部或内部进行赋值,但无论哪种方式,它都需要外部操作,最低限度是运行外部函数一次。– Magnus Lind Oxlund 2019 年 6 月 2 日 12:21


推荐阅读