代码之家  ›  专栏  ›  技术社区  ›  SkyeBoniwell

尝试从React中的函数获取值时出错

  •  0
  • SkyeBoniwell  · 技术社区  · 6 年前

    我有一个React组件,我从另一个文件导入一个函数,如下所示:

    import documentIcons from '/documentIcons';
    

    然后我试着用这样的函数:

    let file = this.state.selectedFile;  //this returns fine
    let fileExt = file.name.split('.').pop();   //this also works
    let fileIcon = documentIcons(fileExt);   //this throws the error
    

    但我不断地得到这个错误:

    未捕获的类型错误:对象(…)不是函数

    documenticons.js文件如下:

    const icons= {
      "jlr": "/icn/typeA.png",
      "trr": "/icn/typeB.png",
      "bpx": "/icn/typeC.png",
    };
    
    export const documentIcons = (f) => {
      this.icons.find(f)
    }
    

    我正在传递一个文件扩展名(jlr、trr或bpx),我希望返回该图标的路径。

    在React/ES6中是否有这样的方法?

    谢谢!

    2 回复  |  直到 6 年前
        1
  •  2
  •   Ori Drori    6 年前

    这个 documentIcons 是一个 named export ,应该是 imported as one :

    import { documentIcons } from '/documentIcons'
    

    另一个选项是将命名导出更改为 default export :

    const documentIcons = (f) => {
        this.icons.find(f) // this error is handled below
    }
    
    export default documentIcons
    

    您还应该删除 this 从方法,因为 icons 是作用域中的常量,而不是同一对象上的属性。对象没有 find 方法,您应该使用括号表示法获取值,然后返回它:

    const documentIcons = (f) => icons[f]
    
        2
  •  1
  •   devserkan    6 年前

    这里有几个零件不见了。

    首先,使用默认值导出函数或将其作为命名函数导入:

    import { documentIcons } from "/documentIcons";
    

    第二个,你不能用 .map 在一个物体上。如果要查找带有对象键的URL,请按如下方式使用:

    icons[f]
    

    第三,你不会从你的功能中返回任何东西。这样使用:

    export const documentIcons = (f) => icons.[f];
    

    以下简称:

    export const documentIcons = (f) => {
        return icons.[f]
    }